CSP:如何调试违规:eval:"script-sample: var KERNEL = ..."

CSP: How to debug violation: eval: "script-sample: var KERNEL = ..."

我们有一个 Web 服务,它具有非常严格的 CSP header,可以阻止 eval 等等。我们收到许多 CSP 违规报告,其中包括以下信息:

{
  "csp-report": {
    "blocked-uri": "eval",
    "column-number": 61,
    "document-uri": "https://example.com/path/to/something",
    "line-number": 56,
    "original-policy": "default-src 'self'; connect-src 'self' https://www.google-analytics.com; script-src 'self' 'report-sample' https://www.google-analytics.com; sandbox allow-downloads allow-popups allow-scripts allow-same-origin allow-top-navigation allow-forms allow-modals allow-popups-to-escape-sandbox allow-presentation; img-src * data:; style-src * 'unsafe-inline'; font-src * data: about:; media-src *; frame-src * data:; report-uri https://example.com/:reportcspviolation",
    "referrer": "",
    "script-sample": "var KERNEL = C6A44CB_AD42_4731_A544_3F…",
    "source-file": "blob:https://example.com/b402b32e-ebf5-4103-b8e8-4cd3c1f56e2a",
    "violated-directive": "script-src"
  }
}

并且 document-uri 处的文档没有任何内联 JavaScript。并且整个服务源代码不包含大写字母KERNEL,因此我们的服务无法发出。 document-uri 处的文档也没有使用任何 <iframe> 元素,因此错误也不能由任何嵌套文档引起。

所有报告似乎都包含完全相同的字母 var KERNEL = C6A44CB_AD42_4731_A544_3F(Firefox 添加省略号并且 Chrome 结束示例 as-is)。

我从以下 UA 字符串中看到了类似的 CSP 报告(按照这种情况发生的频率排序):

很明显这与浏览器兼容性无关。我无法通过使用任何浏览器并加载 document-uri.

指向的地址来重现错误

至少 95% 的 var KERNEL = 报告错误是由 Firefox 85.0 发出的。

为什么source-fileblob:方案中?这是一些 well-known 通过某些浏览器扩展程序破解 运行 JavaScript 代码吗?

我最好的猜测是这是由一些制作不当的浏览器扩展引起的,但有什么办法可以找出真正的原因吗?

All reports seem to include exactly same letters var KERNEL = C6A44CB_AD42_4731_A544_3F

此类签名属于 malicious browser plugin 及其附属病毒。

Why is the source-file in blob: scheme? Is this some well-known hack to run JavaScript code by some browser extension?

我不知道这是不是一个众所周知的黑客攻击,但在浏览器行为中观察到一些奇怪的事情。
您的 CSP 不允许 blob:,因此必须阻止 blob:https://example.com/b402b32e-ebf5-4103-b8e8-4cd3c1f56e2a,我们应该观察 "blocked-uri": "blob"。但是我们看到"blocked-uri": "eval",这意味着blob:https://example.com/b402b32e-ebf5-4103-b8e8-4cd3c1f56e2a被执行了,它的第56行的eval被阻塞了。

注:代码中uses eval() func calls and it uses blob:-URL上面浏览器插件的脚本
是的,这些应该被您的 CSP 阻止,但是在 blob 中阻止 eval 对于像 script-src 'self' 'report-sample' https://www.google-analytics.com.

这样的 CSP 来说是无稽之谈