10.27 Solaris 10 Port Stealing Vulnerability https://scz.617.cn/unix/201103281906.txt Q: Chris O'Regan 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 现在访问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 setsockopt()的SO_EXCLBIND可以阻止这种行为。 A: c0ntex 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就是跎屎。