任意文件读取漏洞 (任意文件上传漏洞如何修复)

Unrestricted File Download

任意文件下载漏洞的防御方式,任意文件读取漏洞

描述:

Unrestricted File Downloads是一种漏洞,它允许恶意行为者*载下**内部文件,从而可能无意间暴露了敏感文件,例如包含数据库凭据的配置文件。在某些情况下,“Unrestricted File Downloads”攻击只会允许访问特定的目录子树,但仍然可能导致跨用户破坏或访问关键配置和敏感文件。

影响:

攻击者通过使用这种类型的攻击所能造成的破坏实际上只受限于暴露信息的价值。例如,如果开发人员将他们的web根文件夹结构为包含敏感的配置文件,其后果当然是极具破坏性的。此外,与攻击者工具包中的许多其他攻击一样,该漏洞可以被攻击者用作垫脚石进而执行其他危害更高的攻击,导致系统的完全破坏。

场景:

一个经典的场景是web应用程序根据查询参数动态获取资源;可用资源存储在文件系统中的特定目录中。例如,下面的URL获取/opt/wwwdata/assets/some-file文件并使用它来构建web页面

http://www.vulnerableapp.com/?pageId=some-file

目录遍历技术通常用于利用文件系统中的这类漏洞;通常用(..),(..\)等,作替代标签来遍历非法的路径、用/和..\允许访问服务器文件系统的非预期资源。

如果没有进行检查或清除,则可以遍历资源目录并针对文件系统上的任何文件。例如,下面的命令在Linux和其他unix派生的系统上获取敏感的/etc/passwd文件:

http://www.vulnerableapp.com/?pageId=../../../../../etc/passwd

防护

如果可能的话,开发人员应该避免使用用户提供的输入构建文件路径字符串。可以重写应用程序的许多功能,以更安全的方式交付功能,实现相同的功能。

如果一定需要将用户提供的输入传递给文件系统API,开发人员必须确保以下内容:

验证用户输入,仅仅接受已知的输入,接受信誉良好的授权用户的输入。

如果不可能根据允许列表进行验证,那么至少应该验证并确保输入中只包含允许的内容

为了深入防御,开发人员永远不应该使用root或SYSTEM特权运行服务器组件,因为这可能使利用此漏洞的恶意行为者能够访问任何文件或文件夹,包括加密密钥和注册表。服务器组件应该使用无权访问关键系统文件的特权较低的用户运行。