许多应用的业务逻辑允许通过文件上传数据或修改数据。但这个业务过程必须检查文件,并只允许特定的,“支持”的文件类型。业务逻辑到底“支持”哪些文件是应用程序/系统相关的。允许用户上传文件可能存在风险,攻击者可能上传未预期的文件类型的文件,而且这些文件可能能被执行,对应用程序造成不利的影响,如丑化站点,执行远程命令,浏览系统文件,浏览本地资源,攻击其他服务器,或利用本地漏洞进行攻击,等等。
上传非预期文件类型的文件的相关漏洞是独特的,因为这个过程本应该在不是特定类型的文件中拒绝上传。此外,区别于恶意文件上传,在大多数的错误文件类型可能本身没有“恶意”,但是保存的文件内容存在问题。举例来说,如果应用程序接受windows excel文件,如果相似的数据库文件被上传,可能这些数据也能被读取,但可能会提取到不正确的位置。
应用程序可能期待某个特定的文件类型被上传处理,如.cvs,.txt文件。应用程序可能不通过后缀(低可信的文件验证)或内容(高可信的文件验证)进行上传文件的验证。这可能导致非预期的系统或数据库结果,或给攻击者额外攻击系统/应用的渠道。
假设一个图片分享应用允许用户上传.gif或.jpg图形文件。万一攻击者能够上传含有<script>
标签的html文件或者php文件会如何?系统可能将这些文件从临时目录移动到最终目录,在这目录中,可能就能执行php代码。
应用程序应该含有只允许“可接受”的文件机制,这些文件会被其他的应用程序使用或处理。一些特定的例子包括:文件类型黑白名单,在http头使用“Content-Type”,或使用文件类型识别程序。目标都是只允许特定类型的文件进入系统。