针对 Web Security Scanner 的发现结果进行补救

>

解读、重现和修复 Web Security Scanner 的发现结果。

漏洞类型

Web Security Scanner 可检测以下类型的漏洞:

  • 跨站脚本攻击 (XSS)
  • Flash 注入
  • 混合内容
  • 明文密码
  • 使用不安全的 JavaScript 库

如果发现其中的任何漏洞,则结果会突出显示,让您可以探索细节。

对日志的影响

Web Security Scanner 扫描痕迹会显示在您的日志文件中。例如,Web Security Scanner 针对异常字符串(如 ~sfi9876/sfi9876)生成请求。这样可以让扫描检查应用的错误页面。这些有意生成的无效页面请求会显示在您的日志中。

针对 Web Security Scanner 的发现结果进行补救

下面介绍了如何修复不同类型的 Web Security Scanner 发现结果。

XSS

Web Security Scanner 跨站脚本攻击(XSS)注入测试通过将良性测试字符串插入用户可修改的字段,然后执行各种用户操作,来模拟注入攻击。在此测试期间,自定义检测器会观察浏览器和 DOM,以确定注入是否成功并评估其被利用的可能性。

如果测试字符串中包含的 JavaScript 顺畅执行,则会启动 Chrome 调试器。 当测试字符串能够执行时,可以在网页上注入并运行 JavaScript。如果攻击者发现了这个问题,那么就可以在用户(受害者)点击恶意链接时冒充该用户来执行由攻击者所选择的 JavaScript。

在某些情况下,所测试的应用可能会在浏览器解析测试字符串之前修改测试字符串。例如,应用可能会验证输入或限制字段的大小。当浏览器尝试运行此修改后的测试字符串时,它可能会中断并抛出 JavaScript 执行错误。这是一个注入问题,但可能无法利用。

要解决此问题,您需要手动验证测试字符串修改是否可以绕过,以确认问题是否为 XSS 漏洞。如需详细了解如何执行此操作,请参阅 跨站脚本攻击

有多种方法可以解决此问题。推荐方法是转义所有输出并使用支持上下文自动转义的模板系统。

XSS_ANGULAR_CALLBACK

当 Angular 插入用户提供的字符串时,AngularJS 模块中会出现跨站脚本攻击 (XSS) 漏洞。将用户提供的值注入 AngularJS 插值可能会允许以下攻击:

  • 攻击者可以将任意代码注入浏览器呈现的页面中。
  • 攻击者可以从页面的起始点,代表受害者浏览器执行操作。

要重现此潜在漏洞,请在运行扫描后点击 Google Cloud Console 中的“再现网址”链接。此链接将直接打开提醒对话框,或注入字符串 XSSDETECTED 以证明攻击可以执行代码。在注入的情况下,您可以打开浏览器的开发者工具,并搜索 XSSDETECTED 以查找注入的确切位置。

XSS_ERROR

XSS_ERROR 发现结果是 JavaScript 中断导致的 XSS 错误。在某些情况下,正在测试的应用可能会在浏览器解析测试字符串之前修改测试字符串。当浏览器尝试运行此修改后的测试字符串时,它可能会中断并抛出 JavaScript 执行错误。这是一个注入问题,但可能无法利用。

要解决此问题,您需要手动验证测试字符串修改是否可以绕过,以确认问题是否为 XSS 漏洞。如需详细了解如何执行此操作,请参阅 跨站脚本攻击

ROSETTA_FLASH

Web Security Scanner 可能会发现请求参数的值反映在响应开头,例如在使用 JSONP 的请求中。这也称为刷写注入。在某些情况下,攻击者可能会使浏览器误以为该响应是易受攻击的网页应用所提供的 Flash 文件而加以执行。

要解决此问题,请不要在 HTTP 响应开头添加可以由用户控制的数据。

MIXED_CONTENT

Web Security Scanner 可以被动地观察 HTTP 流量,在 HTTPS 页面的环境中,还可以检测通过 HTTP 执行对 JavaScript 或 CSS 文件的请求的情况。在此情景中,中间人攻击者可以篡改 HTTP 资源,并获得网站的完整访问权限来加载资源或者监控用户所执行的操作。

要解决此问题,请使用相对 HTTP 链接,例如,将 http:// 替换为 //

OUTDATED_LIBRARY

Web Security Scanner 可能会发现所包含的库版本存在安全问题。这是基于签名的扫描器,会尝试识别正在使用的库的版本,并根据已知的易受攻击库列表进行检查。如果版本检测失败或用户已经手动修补了库,则可能出现误报。

要解决此问题,请更新到所添加的库的已知安全版本。

CLEAR_TEXT_PASSWORD

Web Security Scanner 可能会发现应用似乎在以明文形式传输密码字段。攻击者可以监听网络流量并嗅探密码字段。

要保护客户端与服务器之间传递的敏感信息,请始终采取以下预防措施:

  • 使用 TLS/SSL 证书。
  • 始终在包含密码字段的页面上使用 HTTPS。
  • 确保表单操作属性始终指向 HTTPS 网址。

INVALID_CONTENT_TYPE

Web Security Scanner 发现加载的资源与响应的 Content-Type HTTP 标头不匹配。在这种情况下,应用将返回内容类型无效或不含 X-Content-Type-Options: nosniff 标头的敏感内容。

要修复此漏洞,请确保:

  • JSON 响应以 Content-Type 标头 application/json 形式传送
  • 其他敏感的响应以适当的 MIME 类型提供
  • 使用 HTTP 标头 X-Content-Type-Options: nosniff 传送内容

INVALID_HEADER

Web Security Scanner 可能会发现安全标头具有语法错误,从而导致格式错误或值无效。因此,此标头将被浏览器忽略。

以下部分将介绍有效的标头。

Referrer-Policy 标头

有效的引荐来源网址政策 包含以下值之一:

  • 一个空白字符串
  • no-referrer
  • no-referrer-when-downgrade
  • same-origin
  • origin
  • strict-origin
  • origin-when-cross-origin
  • strict-origin-when-cross-origin
  • unsafe-url

X-Frame-Options 标头

有效的 X-Frame-Options 标头只能包含以下值:

  • DENY:禁止所有框架
  • SAMEORIGIN:如果顶级网址的来源相同,则允许加框架
  • ALLOW-FROM URL

Chrome 不支持 ALLOW-FROM URL。不允许使用多个 X-Frame-Options。

X-Content-Type-Options 标头

有效的 X-Content-Type-Options 标头只能具有一个值:nosniff

X-XSS-Protection 标头

有效的 X-XSS-Protection 标头必须以 0(“禁用”)或 1(“启用”)开头。然后,仅当您启用保护时,最多可以添加两个选项:

  • mode=block 会显示空白页,而不是过滤 XSS
  • report=URL 会将报告发送到 URL

选项需要以分号分隔,例如 1; mode=block; report=URI。请确保没有分号。

MISSPELLED_SECURITY_HEADER_NAME

Web Security Scanner 可能会发现拼写错误的安全标头名称。拼写错误的安全标头无效且必须加以修复。

要重现此漏洞,请检查浏览器开发者工具的网络标签中的拼写错误。

MISMATCHING_SECURITY_HEADER_VALUES

Web Security Scanner 可能会发现响应中包含重复的安全相关响应标头,且这些标头中包含相互冲突的值。如果在响应中使用不匹配的值对一些与安全相关的 HTTP 标头声明两次,则这些标头具有未定义的行为。

要修复此漏洞,请从不匹配的标头中选择一个进行保留。

可访问的代码库

Web Security Scanner 可能会在应用中找到可访问的 GIT 或 SVN 代码库。这可能会导致配置和源代码泄露。

要重现此漏洞,请点击查找结果报告中的重现网址。

验证问题

当 Web Security Scanner 报告问题时,您需要验证问题的位置。为此,请使用已禁用 XSS 保护的浏览器。最好使用 Chrome 的单独测试实例,但大多数允许您禁用 XSS 保护的现代浏览器。

要在 Chrome 中禁用 XSS 保护,请执行以下操作:

  • 如果您使用的是 Linux,请按以下方式调用 Linux Chrome 命令:

    chrome --user-data-dir=~/.chrometest --allow-running-insecure-content \
      --disable-xss-auditor --disable-sync --bwsi
    
  • 如果您使用的是 macOS,请按以下方式调用 Chrome 命令:

    open -n /Applications/Google\ Chrome.app/ --args --disable-xss-auditor \
      --user-data-dir=/tmp/xssrepro
    

执行内容安全政策 (CSP) 可能仍会阻止 JavaScript 代码运行。这会增加重现 XSS 的难度。如果您遇到此问题,请查看浏览器日志控制台,详细了解已发生的 CSP 违规行为。