悟空云课堂丨代码安全第四十五期:未检查的错误情况(CWE-391)缺陷漏洞

149 阅读2分钟

  中科天齐倾情打造《悟空云课堂》旨在科普软件安全相关知识,助力企业有效防范软件安全漏洞,提升网络安全防护能力。本期主题为未检查的错误情况漏洞的相关介绍。

一、什么是未检查的错误情况?

  以InterruptedException为例,InterruptedException出现一般都是因为在线程执行的时候被打断(interrupt),线程(A)不是自己打断自己,一般都是在另外一个线程(B)中执行中断方法(objA.interrupt())。

  每个线程都管理一个自己的中断状态(interruptionstatus),它可以通过Thread#interrupt()方法设置位中断状态,或者使Thread#interrupted()重置状态。另外,Thread#isInterrupted()通常用来判断是否处于中断状态。

二、未检查的错误情况有什么危害?

  若未检查的错误情况不能得到及时处理,会引起意想不到的攻击(OWASP-2004:A7中内有相应的记载),还是拿InterruptedException为例,不正确的错误处理和代码中不能忽略InterruptedExceptions,只需将异常计数记录为“忽略”。这个抛出InterruptedException将清除线程的中断状态,因此如果异常处理不当,则线程被中断的消息将丢失。

三、如何处理未检查的错误情况?

  InterruptedExceptions应该立即或在清理之后重新抛出方法的状态,或线程应该通过调用Thread.interrupt() ,即使这是单线程应用。任何其他操作都有可能延迟线程关闭,并丢失线程被中断的信息(可能还没完成任务)。类似地,ThreadDeath异常也可能被传播。根据它的JavaDoc,如果ThreadDeath被一个方法捕获,那么它必须被重新thrown,这样线程才会真正消亡。

四、含有“未检查的错误情况”缺陷的代码样例:

  /**
  Main processing method for the ThreadWatcher object
  **/
  public void run()
  {
  try
  {
  Tread.sleep(myTimeout);
  }
  catch (InterruptedException e)
  {
  // do nothing -- if watcher is interrupted, so is thread
  }
  interrupt;
  }
  }

  使用Wukong软件代码安全检测修复系统检测上述程序代码,则可以发现代码中存在着“未检查的错误情况”的安全漏洞。请见下图:

5.png

               软件安全 网络安全的最后一道防线

            中科天齐公司是在中科院计算技术研究所的大力推动下

              以中科院计算所国际领先的自主研究成果

              “软件代码漏洞检测修复平台(Wukong悟空)

                  为基础组建的高新技术企业

  关键词标签:悟空云课堂 未检查的错误情况 软件安全检测 代码缺陷检测 代码漏洞修复

  参读链接:www.woocoom.com/b021.html?i…