代码注入
代码注入 是什么?
代码注入一类漏洞,攻击者提供的数据被应用作为代码解释并执行,导致在应用上下文中实现任意执行。
代码注入(CWE-94)是一个广义漏洞类别:不受信任的输入被纳入应用程序后续作为程序代码处理的内容,从而被运行时执行。与命令注入(触达操作系统 shell)不同,代码注入在应用自身的解释器内运行。具体形式包括 JavaScript 与 Python 的 eval 注入、服务端模板注入、表达式语言注入(OGNL、SpEL)、触发 gadget 链的不安全反序列化,以及基于用户数据的动态类加载。成功利用通常获得以应用身份运行的远程代码执行,常成为接管主机或集群的跳板。
三个标志性案例说明其危害。Apache Struts CVE-2017-5638 允许在畸形的 Content-Type 头中执行 OGNL 表达式;一个未打补丁的实例导致了 2017 年 Equifax 泄露事件,约 1.47 亿条记录外泄。Log4Shell(CVE-2021-44228),CVSS 10.0,使任何包含 JNDI 查找的被记录字符串触发远程 Java 类加载。Spring4Shell(CVE-2022-22965) 滥用 Spring 的数据绑定操纵 ClassLoader,植入 Web Shell。
flowchart TD
A[不受信任的输入] --> B{是否到达执行代码的汇聚点?}
B -->|eval / 模板 / OGNL / 反序列化| C[解释器执行攻击者代码]
B -->|已校验 / 参数化| D[作为惰性数据处理]
C --> E[以应用身份实现 RCE]
E --> F[主机 / 集群沦陷]
D --> G[安全]防御措施:绝不从输入构建代码、模板或表达式;使用参数化与白名单化的 API;禁用或沙箱化动态求值与反序列化;及时修补框架;并以最小权限运行,使 RCE 的波及范围尽可能小。
● 示例
- 01
eval(request.body.expr) 在 Node 服务中执行攻击者控制的 JavaScript。
- 02
Java 应用对用户提供的脚本调用 ScriptEngine.eval。
● 常见问题
代码注入 是什么?
一类漏洞,攻击者提供的数据被应用作为代码解释并执行,导致在应用上下文中实现任意执行。 它属于网络安全的 攻击与威胁 分类。
代码注入 是什么意思?
一类漏洞,攻击者提供的数据被应用作为代码解释并执行,导致在应用上下文中实现任意执行。
如何防御 代码注入?
针对 代码注入 的防御通常结合技术控制与运营实践,详见上方完整定义。
代码注入 还有哪些其他名称?
常见的别称包括: 远程代码执行, 任意代码执行。