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 Can't grab 0.0.0.0:55555 with bind
这是意料之中的。但是:
$ nc -l -p 55555 -s foo
将成功侦听在foo:55555上。可以用lsof确认:
让我们建立一个端口转发:
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标准,是被期望的特性。他们给了一个极 不靠谱的临时解决方案:
这跟没解决一样,我总不能将所有大于1023的端口都设成特权端口吧。
查看非(0,1024)区间的特权端口:
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就是跎屎。