当前位置: 首页 > 知识库问答 >
问题:

OS命令注入(CWE ID 78)(1缺陷)Java代码

公良渝
2023-03-14

但Veracode仍报告操作系统命令注入缺陷。

旧代码:

公共进程执行器(字符串[]cmd,字符串[]env)引发IOException{

  return Runtime.getRuntime().exec(cmd, env);

}

新代码:

公共进程执行器(字符串[]cmd,字符串[]env)引发IOException{

  String[] newCmdArr = new String[cmd.length];

  String[] newEnvArr = new String[env.length];

  for(int i=0;i<env.length;i++)

  {

  newEnvArr[i] = CSSecurity.getValidInput(ESAPIContext.OSCommand, env[i], ESAPIType.OSCommand);               

  }       

  for ( int i = 0; i < cmd.length; i++ ) 

  {

   newCmdArr[i] = CSSecurity.getValidInput(ESAPIContext.OSCommand, cmd[i], ESAPIType.OSCommand);

  }

  return Runtime.getRuntime().exec(newCmdArr, newEnvArr);   

 }

共有1个答案

陶成化
2023-03-14

这个答案可能为时已晚,但对其他人可能有用。尝试改用encodeForOS ESAPI方法:

    import org.owasp.esapi.ESAPI;
    import org.owasp.esapi.codecs.WindowsCodec;
    
    public Process exec(String[] cmd, String[] env) throws IOException {

       String[] newCmdArr = new String[cmd.length];
       String[] newEnvArr = new String[env.length];

       for(int i=0; i<env.length; i++){
          newEnvArr[i] = ESAPI.encoder().encodeForOS(new WindowsCodec(),env[i]);
       }

       for (int i=0; i<cmd.length; i++){
          newCmdArr[i] = ESAPI.encoder().encodeForOS(new WindowsCodec(),cmd[i]);
       }
     
     return Runtime.getRuntime().exec(newCmdArr, newEnvArr);
    }
 类似资料:
  • 这是正确的解决办法吗?我还能做什么? 这是报告信息:标题:日志的不正确输出中和 描述:函数调用可能导致日志伪造攻击。将未经处理的用户提供的数据写入日志文件可使攻击者伪造日志条目或将恶意内容注入日志文件。损坏的日志文件可用于掩盖攻击者的踪迹,或作为攻击日志查看或处理实用程序的传递机制。例如,如果web管理员使用基于浏览器的实用程序查看日志,则可能会发生跨站点脚本攻击。

  • JIRA bug生命周期也称为缺陷生命周期。错误生命周期由一组错误通过的状态组成。错误经历的状态数因项目而异。我们可以将Bug定义为错误,缺陷或者我们可以说当实际输出与预期输出不匹配时,它被称为错误或缺陷。这两个术语,即bug和缺陷都是常用的,但最流行的是一个bug。可以在SDLC(软件开发生命周期)的任何阶段生成错误,它可以存在于需求收集,设计SRS文档的设计阶段,开发阶段,测试阶段或最终用户在

  • 6.3. 命令注入 使用系统命令是一项危险的操作,尤其在你试图使用远程数据来构造要执行的命令时更是如此。如果使用了被污染数据,命令注入漏洞就产生了。 Exec()是用于执行shell命令的函数。它返回执行并返回命令输出的最后一行,但你可以指定一个数组作为第二个参数,这样输出的每一行都会作为一个元素存入数组。使用方式如下: <?php $last = exec('ls', $output, $ret

  • 我是科尔多瓦的新手,所以如果我的问题不相关,请原谅我。我的Windows7x64机器中有一个cordova项目。昨天,我通过构建了我的cordova应用程序。但是我需要添加新的插件来更新我的cordova项目。我做了什么来添加这个插件到我的cordova应用程序; null 构建失败C:\android\sdk\tools\ant\BUILD.xml:720:执行这一行时发生以下错误:C:\and

  • 问题内容: 我是科尔多瓦的新手,所以如果我的问题不相关,请原谅我。我在Windows 7 x64计算机上有一个cordova项目。昨天,我通过构建了Cordova应用。但是我需要添加新的插件来更新我的cordova项目。我将该插件添加到我的cordova应用程序中所做的工作; 我在win7 x64 env上安装了git应用程序。 我在cmd上写了这个命令。 我打开Windows环境变量/路径窗口并

  • 尽管支持抢先式多任务处理,但进程生成却很昂贵——虽然比不上 VMS,但是(平均生成一个进程需要0.1秒左右)要比现在的 Unix 高出一个数量级。脚本功能薄弱,操作系统广泛使用二进制文件格式。除了此前我们总结过的,还有这些后果: 大多数程序都不能用脚本调用。程序间依赖复杂脆弱的远程过程调用(RPC)来通信,这是滋生 bug 的温床。 ……………… Unix 的系统配置和用户配置数据分散存放在众多的