
Demuestra una fuga de memoria en el cliente de JBoss al usar UserTransaction repetidamente, con un PoC y análisis para CVE-2022-0853.
Una fuga de memoria en el lado del cliente jboss, al usar UserTransaction repetidamente.
Por ejemplo:
private void testTransaction() throws Exception {
for(int i=1; i< 500000; i++) {
System.out.println("Starting process " + i);
// get the UserTransaction and EJB Proxy
Context ctx = getInitialContext(host, port, username, password);
UserTransaction tx = getUserTransaction(ctx);
ControllerRemote cr = (ControllerRemote)
ctx.lookup("Controller/Controller" + "!com.test.usertransaction.ControllerRemote");
try {
tx.begin();
}
catch(Exception ex1) {
ex1.printStackTrace();
}
//System.out.println("user transaction started");
cr.mainCall();
try {
tx.commit();;
}
catch(Exception ex1) {
ex1.printStackTrace();
throw ex1;
}
//System.out.println("commited user transaction");
if(ctx != null)
ctx.close();
}
}
La transacción es ejecutada por un cliente remoto en un EJB desplegado en EAP 7.3. La transacción se itera 50000 veces. Al final de las iteraciones se observa una fuga de memoria. El 32% de la memoria está ocupada por org.wildfly.transaction.client.provider.remoting.TransactionClientChannel.