22 个常见的 Web 应用程序漏洞
已发表: 2021-10-14企业不断“左移”并利用云驱动应用程序提供的创新客户和员工体验。 与此同时,恶意攻击者也在不断地修改他们的攻击策略以适应这种转变。
为了保护数据隐私和安全,企业必须寻求针对这 22 个常见Web 应用程序漏洞的保护。
损坏的访问控制
访问控制负责用户如何与资源和数据交互,以及他们可以编辑和/或阅读的内容。 当用户能够以真正不必要的方式使用数据时,可能会出现错误的访问控制漏洞。 例如,如果用户应该只能阅读支付细节,但实际上有能力编辑它们,那么这种情况就是访问控制被破坏的例证。 恶意攻击者利用此漏洞获得对软件、网络和系统的未经授权的访问。 然后,他们可以利用这种情况,授予用户 ID 在基础架构内的更多访问权限,从而损害数据的可用性、机密性或完整性。
损坏的认证
与损坏或损坏的身份验证相关的Web 应用程序漏洞也源于用户访问。 然而,在这种情况下,恶意攻击者会对确认用户身份的数据产生负面影响,例如通过劫持会话令牌、密钥或密码。 恶意攻击者获得对软件、系统和网络的未经授权的访问,因为组织无法正确设置适当的身份和访问管理控制。
回车换行 (CRLF) 注入
回车用作表示代码行开头的命令,通常表示为 /r。 另一方面,换行是表示代码行结束的命令,通常表示为 /n。 与其他几个软件一样,每个操作系统都使用不同的回车和换行组合。 当恶意攻击者参与 CRLF 注入时,输入的代码会改变 Web 应用程序对命令做出反应的方式。 这可用于泄露敏感数据或执行代码。
密码转换不安全
Cipher 是“加密算法”的标准术语,实际上是加密或解密过程背后的数学。 转换是指对输入执行的操作大纲,以提供预期的输出。 因此,密码转换是指将不可读的加密数据转换回可读的解密数据的操作数。 密码转换不安全漏洞描述了加密算法很容易被破解,最终破坏了加密的本质。
具有明显漏洞的组件
每个 Web 应用程序都依赖于其他组件来运行。 例如,如果您在未打补丁的 Web 或应用服务器上运行应用程序,那么服务器就是存在明显漏洞的部分。 常见漏洞和披露 (CVE) 列表包含所有已知的安全漏洞。 由于恶意攻击者知道该列表,他们经常寻找没有足够安全补丁更新的组件。 当他们可以渗透到 Web 应用程序的一个组件时,他们也可以获得对应用程序数据的访问权限。
跨域资源共享 (CORS) 政策
所有基于 Web 的应用程序都使用 URL 作为将用户浏览器连接到其服务器的媒介。 同源策略是一种常见的保护措施。 与此一致,服务器将仅响应具有相同协议、路径架构和顶级域名的 URL。 这意味着您可以访问 http://organization.com/page1 和 http://organization.com/page2 因为它们都共享以下内容:
- 协议:HTTP
- 域名:Company.com
- 路径架构:/page#
虽然它是安全的,但同源策略在处理需要访问连接到第三方或子域的资源的基于 Web 的应用程序时具有限制性。
CORS 策略通过建立一些被视为“可信”的允许 HTTP 标头授予浏览器查看这些相互关联的资源的权限。 例如,应用程序可能必须从不同 Web 服务器上的两个数据库中提取数据。 当您包含额外的服务器时,起草一个特定的“允许”列表变得过度工作。 由于两台服务器都在“共享”应用程序,因此该公司编写了一个 CORS 策略,允许浏览器连接到两者。 但是,如果未正确定义 CORS 策略,则该策略可能会让服务器在恶意攻击者请求时授予访问权限。
凭证管理
用户凭证包括用户 ID 和密码。 在获得对应用程序的访问权之前,用户必须将这两项信息提供到登录页面中。 但是,数据库倾向于使用弱加密或以明文形式保存信息。 糟糕的凭据管理允许攻击者轻松窃取凭据并利用它们获取对 Web 应用程序的访问权限。
跨站请求伪造 (CSRF)
CSRF 攻击使用社会工程方法来驱使用户修改应用程序中的信息,例如密码或用户名。 与跨站点脚本 (XXS) 攻击或恶意软件不同,CSRF 要求用户登录到仅使用会话 cookie 来验证用户请求或跟踪会话的应用程序。 在用户执行预期操作的那一刻,恶意行为者使用浏览器执行攻击的剩余部分,例如转移资金,而用户不知道发生了什么。
跨站点脚本 (XXS)
与要求用户登录应用程序以被欺骗更改某些信息的 CSRF 不同,XXS 攻击需要恶意攻击者将代码输入网页,通常在页面的某些组件中,例如图像。 一旦用户在浏览器上启动网页,不良代码就会开始下载并在浏览器中运行。 例如,恶意代码可能会将用户从可信站点重定向到非法站点。
目录索引
通常,Web 服务器将保存在它们上的所有文件概述在一个目录中。 当用户想要在 Web 应用程序中定位特定文件时,他们通常在请求中添加文件名。 在文件不可用的情况下,应用程序将向用户显示所有索引文件的列表,以便用户可以选择其他内容。
但是,这些文件会由 Web 服务器自动索引。 当应用程序显示所有存储文件的列表时,恶意攻击者利用目录索引中的漏洞可以获得对数据的访问权限,从而为他们提供有关系统的更多信息。 例如,他们可以了解个人用户帐户或命名约定。 这两个数据点可被用来执行凭证盗窃攻击或解开敏感信息。
目录遍历
也称为回溯攻击、点-点-斜线和目录爬升,目录遍历漏洞利用应用程序从网络服务器接收数据的方式。 访问控制列表 (ACL) 通常限制用户访问根目录内的某些给定文件。 使用目录遍历漏洞模式的恶意攻击者会找出应用程序在请求文件时使用的 URL 格式。
封装
与列表中的其他一些常见Web 应用程序漏洞不同,封装漏洞利用了开发人员编写应用程序的方式中的缺陷。 封装是一个编程术语,指将数据和可以对该数据执行的操作捆绑到一个单元中。 封装通过隐藏有关代码如何运行的信息来保护数据,从而提供更好的用户界面。 用户不必知道应用程序如何向他们传递数据; 他们所需要的只是访问它。
例如,应用程序开发人员可以在应用程序检索数据的能力中包含访问控制,例如读取或写入权限。 如果用户在应用程序中请求信息,它只会提供他们被允许访问的数据。
但是,如果开发人员未能在数据和跨应用程序各个方面执行的操作之间设置明确定义的边界,那么应用程序就会遭受封装漏洞。 攻击者通过向应用程序发送请求来利用这一点,因为他们知道这样的操作会导致错误消息。 此错误消息随后提供有关应用程序结构的信息,有助于更多的攻击策略,例如 DOS – 拒绝服务。
不安全的直接对象引用 (IDOR)
Web 应用程序 URL 能够公开用于将用户引导到后端存储位置的模式或格式。 例如,URL 可能会显示存储系统(如文件系统或数据库)中记录标识符的模式/格式。
单独的 IDOR 可能是一个低风险的问题。 但是,当 IDOR 与失败的访问控制检查相结合时,攻击者就有机会成功实施攻击。
您应该知道的其他常见Web 应用程序漏洞包括:
HTTP 响应拆分
这是一种 CRLF 注入攻击。 HTTP 是浏览器发送查询和服务器发回响应的过程。 在此 Web 应用程序漏洞中,恶意攻击者利用 CR 和 LR 符号来操纵浏览器和服务器之间的通信方式,从而传递请求,但告诉服务器将响应“划分”为各个部分。 将响应分成两个不同的部分使恶意行为者能够控制服务器为响应请求的另一部分而提供的信息。 当此类请求的数据是用户 ID 数据或敏感信息时,恶意行为者已成功执行攻击。
注入缺陷
注入漏洞允许使用多种攻击技术。 任何允许用户更新 shell 命令、操作系统调用或数据库的应用程序都可能遭受注入漏洞。 恶意攻击者利用注入漏洞来改变命令,这些命令在应用程序中发展为新的和意外的操作。 通过利用这些漏洞,恶意行为者能够创建、更新、读取甚至删除数据。
不安全的消息摘要漏洞
这是一个限制加密有效性的加密漏洞。 消息摘要应包含密码散列函数。 与加密相反,散列函数不需要发送者和用户使用密钥。
因此,恶意攻击者利用不安全的摘要漏洞来维持“哈希冲突攻击”。 攻击的目的是查明发送输入是否会导致重复哈希的生成。 如果恶意行为强行生成一个共享散列,那么他们可以使用该散列呈现恶意文件以供下载。 这反过来让最终用户假设文件是合法的。
传输层保护不足
传输层安全性 (TLS) 是指计算机应用程序能够在 Internet 上安全地相互“通信”的过程。 许多应用程序仅在身份验证过程中使用 TLS,这使得数据和 ID 会话信息在人们使用应用程序时容易受到攻击。
当数据在用户设备和应用服务器之间通过互联网移动时,攻击者可以利用此漏洞转移数据。
远程代码执行 (RCE)
远程代码执行漏洞是 Web 应用程序中的编码错误,使恶意攻击者能够插入代码,而不管其地理位置如何。 RCE 属于更广泛的 Web 应用程序注入漏洞类别,攻击者将自己的代码输入到不会确认用户输入的应用程序中,从而使服务器将其视为真正的应用程序代码。 通常,恶意攻击者会利用未修补的常见漏洞并将其代码插入应用程序。
远程文件包含 (RFI)
要将公共目录链接到应用程序,开发人员在他们的代码中添加“包含”语句。 例如,应用程序可能必须从数据库中提取数据。 与其手动编写代码来获取每个文件,“include”语句有助于链接整个源目录,以便可以使用存储在那里的所有内容。
当 Web 应用程序遭受 RFI 漏洞时,攻击者可以操纵该应用程序将恶意代码或恶意软件上传到数据库、服务器或网站。
安全配置错误
安全配置错误的可能性确实是当今最常见的Web 应用程序漏洞之一。 此漏洞通常由于组织未能修改默认安全设置而发生。 常见的安全错误配置是:
- 使用默认密码或帐户
- 未打补丁的软件
- 无加密
- 防火墙策略不足
- 忽略未使用的资源、功能和其他组件
SQL注入
SQL,意思是结构化查询语言,是一种用于数据库的编程语言。 它允许检索和操作关系数据库的数据。 SQL 注入漏洞存在于一大群未经验证的用户输入之下。 当恶意行为者故意发送虚假请求时,Web 应用程序会以错误消息进行响应,向他们提供有关数据库结构和保护的信息。
未经验证的自动库激活
为了节省编码时间,开发人员倾向于使用第三方库。 在大多数情况下,这使他们能够利用预先测试的代码来加速应用程序开发过程。 然而,使用公开可用的开源代码会增加安全风险,包括:
- 没有记录所有权会增加添加恶意代码的风险
- 不再更新的被忽视项目
考虑到多个应用程序涉及第三方库依赖项,此特定漏洞越来越普遍。
我们希望这篇博文的内容确实对您有用且富有洞察力。 确保找到适用于您案例的任何 Web 应用程序漏洞的解决方案,这将改变您的员工和客户体验。