当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0151955

漏洞标题:NanoHttpd一处设计不当可导致remote-hddr被覆盖

相关厂商:NanoHttpd

漏洞作者: SummerShrimp

提交时间:2015-11-05 09:50

修复时间:2015-12-17 14:48

公开时间:2015-12-17 14:48

漏洞类型:设计错误/逻辑缺陷

危害等级:中

自评Rank:6

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-11-05: 细节已通知厂商并且等待厂商处理中
2015-11-09: 厂商已经确认,细节仅向厂商公开
2015-11-12: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航
2016-01-03: 细节向核心白帽子及相关领域专家公开
2016-01-13: 细节向普通白帽子公开
2016-01-23: 细节向实习白帽子公开
2015-12-17: 细节向公众公开

简要描述:

为什么wormhole中的remote-addr判断能被轻易绕过?原来是因为有个猪队友

详细说明:

nanohttpd服务器在core/src/main/java/fi/iki/elonen/NanoHTTPD.java中,先将tcp包中的inetaddr地址取出放入headers['remote-hddr']中,再提取http请求中的header放入headers中,导致了remote-addr可被轻易覆盖
nanohttpd经常嵌入在java程序中提供简易的http服务

if (null != this.remoteIp) {
this.headers.put("remote-addr", this.remoteIp);
this.headers.put("http-client-ip", this.remoteIp);
}//先提取出了tcp包中的remoteIp
// Create a BufferedReader for parsing the header.
BufferedReader hin = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(buf, 0, this.rlen)));
// Decode the header into parms and header java properties
Map<String, String> pre = new HashMap<String, String>();
decodeHeader(hin, pre, this.parms, this.headers);//又提取了httpHeader

漏洞证明:

百度wormhole就用了这货,请求的时候加一个header remote-addr: **.**.**.**就可以轻易绕过限制。你们都懂

修复方案:

交换读header和将ip地址写入header变量的顺序

版权声明:转载请注明来源 SummerShrimp@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2015-11-09 11:15

厂商回复:

CNVD确认所述情况,已由CNVD通过网站管理方公开联系渠道向其邮件通报,由其后续提供解决方案。

最新状态:

暂无