在程序使用不受信任的数据作为JNDI查找的地址,JNDI会将特定地址对象返回,这可能导致攻击者远程运行任意Java代码。
**例如**:以下代码片段使用不可信赖的数据运行JNDI查找。
```java
...
String address = request.getParameter("address");
...
InitialContext initialContext = new InitialContext(props);
initialContext.lookup(address);
...
```
咨询一下框架(bladex-tool)有对代码注入-JNDI查找地址注入这种类型漏洞统一进行处理吗?具体处理的代码是在哪里呢
这种可以接受任意执行地址的代码,本身就是开发习惯和安全意识的问题,InitialContext是jdk自带的类,没法通过外部框架层面去规避。因为你直接new出来的类执行lookup是jdk底层的逻辑,外部无法干预
如果觉得是漏洞,其实应该让jdk提供方处理才对,就好比写一个jdbcTemplte,传入一个drop全表的语句传进去导致表没了,就说数据库一点都不安全一个道理。
如果需要规避这个问题,具体可以按:“白名单校验 + 归一化(规范化)+ 限定命名空间 + 阻断协议/URL”四步来处理,在进入 InitialContext.lookup 之前就把任何不合规输入拒绝掉;并尽量用内部映射替代直接传递 JNDI 名称。
具体怎么实现,百度一下有很多方案,可自行查阅。
扫一扫访问 Blade技术社区 移动端