JNDI注入问题咨询

Blade 未结 1 20

在程序使用不受信任的数据作为JNDI查找的地址,JNDI会将特定地址对象返回,这可能导致攻击者远程运行任意Java代码。


**例如**:以下代码片段使用不可信赖的数据运行JNDI查找。

```java

...

String address = request.getParameter("address");

...

InitialContext initialContext = new InitialContext(props);

initialContext.lookup(address);

...

```

咨询一下框架(bladex-tool)有对代码注入-JNDI查找地址注入这种类型漏洞统一进行处理吗?具体处理的代码是在哪里呢

1条回答
  • 这种可以接受任意执行地址的代码,本身就是开发习惯和安全意识的问题,InitialContext是jdk自带的类,没法通过外部框架层面去规避。因为你直接new出来的类执行lookup是jdk底层的逻辑,外部无法干预


    如果觉得是漏洞,其实应该让jdk提供方处理才对,就好比写一个jdbcTemplte,传入一个drop全表的语句传进去导致表没了,就说数据库一点都不安全一个道理。


    如果需要规避这个问题,具体可以按:“白名单校验 + 归一化(规范化)+ 限定命名空间 + 阻断协议/URL”四步来处理,在进入 InitialContext.lookup 之前就把任何不合规输入拒绝掉;并尽量用内部映射替代直接传递 JNDI 名称。


    具体怎么实现,百度一下有很多方案,可自行查阅。


    0 讨论(0)
提交回复