硬编码数据被解释为代码¶
ID: rb/hardcoded-data-interpreted-as-code
Kind: path-problem
Security severity: 9.1
Severity: error
Precision: medium
Tags:
- security
- external/cwe/cwe-506
Query suites:
- ruby-security-extended.qls
- ruby-security-and-quality.qls
将硬编码数据(例如包含十六进制数字的字符串文字)解释为代码或导入路径,这在恶意后门代码中很常见,这些代码已植入原本受信任的代码库中,并试图隐藏其真实目的,使其不会被普通读者或自动扫描工具发现。
建议¶
仔细检查有问题的代码,以确定其来源和真实目的。如果代码是良性的,应该始终可以重写它,而无需依赖动态解释数据作为代码,从而提高清晰度和安全性。
示例¶
例如,以下简化的 Ruby 版本的后门代码片段,使用这种混淆技术,该代码片段是在流行的 JavaScript event-stream
npm 包的依赖项中发现的
def e(r)
[r].pack 'H*'
end
# BAD: hexadecimal constant decoded and interpreted as import path
require e("2e2f746573742f64617461")
虽然这仅显示了代码的前几行,但它已经看起来非常可疑,因为它获取一个硬编码的字符串文字,对其进行十六进制解码,然后将其用作导入路径。这样做的唯一原因是隐藏要导入的文件的名称。
参考资料¶
OWASP: 特洛伊木马.
npm 博客: 关于 event-stream 事件的详细信息.
通用弱点枚举: CWE-506.