Winamp Web接口(Wawi)是Winamp的一个开源插件,允许用户通过Web浏览器远程管理媒体播放器。
Wawi的实现后半辈子存在多个安全漏洞,具体如下:
-----------------------------------
A] FindBasicAuth缓冲区溢出
-----------------------------------
FindBasicAuth()函数位于security.cpp,用于解析客户端请求中的Authorization HTTP字段。一般来讲这个函数顺序将包含有username:password字段的认证模式和base64字符串放置到仅有100字节的temp缓冲区,然后使用userpass缓冲区解码这个字符串。如果攻击者能够指定大于100字节的超长用户名字段的话,就会触发栈溢出。
-------------------------------
B] 目录遍历
-------------------------------
Browse()函数位于browse.cpp,用于限制根目录中特定文件夹的可用文件。该函数会使用GoodPath()对客户端所接收到的路径进行检查,确认由逗点和反斜线(如\..\)所导致的风险。
在调用这个函数之前斜线都被正确的转换为了反斜线,但16进制斜线%2f却没有被处理,从而允许浏览根目录所在磁盘的任何文件夹,因此攻击者可以通过目录遍历攻击绕过访问浏览任意文件。
-------------------------------------------------------------
C] browse、download和load函数缓冲区溢出
-------------------------------------------------------------
Browse()、CControl::Download()和CControl::Load()函数中存在缓冲区溢出。如果所创建的字符串包含有根目录和从客户端接收到的路径字符串的话,而使用的缓冲区仅有MAX_PATH字节(260,客户端字符串的大小),就可以触发这个漏洞。
-----------------------------------------------------
D] 文件下载绕过文件扩展名检查
-----------------------------------------------------
Wawi会检查拥有Download权限用户所下载的一些文件类型。在配置的Music Collections部分,可以在浏览或下载Winamp文件及其他文件之间进行切换。CControl::Download()调用IsWinampFile()函数检查Winamp是否支持所请求的文件名,然后如果选择了相关选项的话就会允许下载。如果在所请求的文件名后面添加一个逗点的话,则拥有Download权限的攻击者就可以下载根目录中拥有任意扩展名的文件。
------------------
E] 路径名重合
------------------
任何用于处理文件的函数都要求在路径或文件名之前有反斜线,如http://localhost/browse?path=\ 。如果另一个文件夹或文件以同样的根目录名称开始的话,就可能错误的使用这个文件。
举例来讲,如果根目录为c:\folder,而攻击者使用http://localhost/browse?path=2 ,则如果存在的话攻击者就可以浏览c:\folder2,或下载c:\folder2.mp3文件。
Flippet.org WAWI <= 7.5.13
<a href="http://www.flippet.org/wawi/" target="_blank">http://www.flippet.org/wawi/</a>
暂无评论