硬编码数据被解释为代码¶
ID: js/hardcoded-data-interpreted-as-code
Kind: path-problem
Security severity: 9.1
Severity: error
Precision: medium
Tags:
- security
- external/cwe/cwe-506
Query suites:
- javascript-security-extended.qls
- javascript-security-and-quality.qls
将硬编码数据(例如包含十六进制数字的字符串文字)解释为代码或导入路径,是恶意后门代码的典型特征。这种代码被植入到原本可信的代码库中,试图隐藏其真实目的,以防被普通读者或自动化扫描工具发现。
建议¶
仔细检查有问题的代码,以确定其来源及其真实目的。如果代码是良性的,那么应该始终可以重写它,而无需依赖于动态地将数据解释为代码,从而提高清晰度和安全性。
示例¶
例如,以下简化版本的后门代码片段,在流行的 event-stream
npm 包的依赖项中被发现,展示了使用此混淆技术的恶意代码。
var r = require;
function e(r) {
return Buffer.from(r, "hex").toString()
}
// BAD: hexadecimal constant decoded and interpreted as import path
var n = r(e("2e2f746573742f64617461"));
虽然这仅显示了代码的前几行,但它已经看起来非常可疑,因为它获取一个硬编码的字符串文字,进行十六进制解码,然后将其用作导入路径。这样做唯一的理由是隐藏被导入文件的名称。
参考¶
OWASP: 特洛伊木马.
The npm Blog: 关于 event-stream 事件的详细信息.
通用弱点枚举:CWE-506.