// ĠCopyright Ġ 2 0 2 1 ĠCode ĠIntelligence ĠGmbH Ċ // Ċ // ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ // Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ // ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ // Ċ // ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ // Ċ // ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ // Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ // ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ // ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ // Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ċ package Ġcom . code _ int elligence . j az zer . sanitizers Ċ Ċ import Ġcom . code _ int elligence . j az zer . api . F uz zer Security Issue Critical Ċ import Ġcom . code _ int elligence . j az zer . api . Hook Type Ċ import Ġcom . code _ int elligence . j az zer . api . J az zer Ċ import Ġcom . code _ int elligence . j az zer . api . Method Hook Ċ import Ġjava . lang . invoke . Method Handle Ċ Ċ /** Ċ Ġ* ĠDetect s Ġunsafe Ġexecution Ġof ĠOS Ġcommands Ġusing Ġ[ Process Builder ]. Ċ Ġ* ĠExec uting ĠOS Ġcommands Ġbased Ġon Ġattacker - controlled Ġdata Ġcould Ġlead Ġto Ġarbitrary Ġcould Ġexecution . Ċ Ġ* Ċ Ġ* ĠAll Ġpublic Ġmethods Ġproviding Ġthe Ġcommand Ġto Ġexecute Ġend Ġup Ġin Ġ[ java . lang . Process Impl . start ], Ċ Ġ* Ġso Ġcalls Ġto Ġthis Ġmethod Ġare Ġhook ed . Ċ Ġ* ĠOnly Ġthe Ġfirst Ġentry Ġof Ġthe Ġgiven Ġcommand Ġarray Ġis Ġanalyzed . ĠIt Ġstates Ġthe Ġexecutable Ġand Ġmust Ċ Ġ* Ġnot Ġinclude Ġattacker Ġprovided Ġdata . Ċ Ġ*/ Ċ @ Suppress (" unused _ parameter ", Ġ" unused ") Ċ object ĠOs Command Injection Ġ{ ĊĊĠĠĠ Ġ// ĠShort Ġand Ġprobably Ġnon - existing Ġcommand Ġname ĊĠĠĠ Ġprivate Ġconst Ġval ĠCOMMAND Ġ= Ġ" j az ze " ĊĊĠĠĠ Ġ@ Method Hook ( ĊĠĠĠĠĠĠĠ Ġtype Ġ= ĠHook Type . BEFORE , ĊĠĠĠĠĠĠĠ Ġtarget ClassName Ġ= Ġ" java . lang . Process Impl ", ĊĠĠĠĠĠĠĠ Ġtarget Method Ġ= Ġ" start ", ĊĠĠĠĠĠĠĠ Ġadditional Classes To Hook Ġ= Ġ[" java . lang . Process Builder "] ĊĠĠĠ Ġ) ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġprocess Impl Start Hook ( method : ĠMethod Handle ?, Ġalways Null : ĠAny ?, Ġargs : ĠArray < Any ? >, Ġhook Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCalling ĠProcess Builder Ġalready Ġchecks Ġif Ġcommand Ġarray Ġis Ġempty ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġ( args [ 0 ] Ġas ? ĠArray < String >) ?. first (). let Ġ{ Ġcmd Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cmd Ġ== ĠCOMMAND ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ az zer . report Finding From Hook ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF uz zer Security Issue Critical ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" OS ĠCommand ĠInjection Ċ Executing ĠOS Ġcommands Ġwith Ġattacker - controlled Ġdata Ġcan Ġlead Ġto Ġremote Ġcode Ġexecution .""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ az zer . guide Tow ards Equality ( cmd , ĠCOMMAND , Ġhook Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ