
Reproducer für CVE-2022-0853: ein Speicherleck in jboss-client bei wiederholter Verwendung von UserTransaction, demonstriert anhand eines Java EJB Remote-Client-Testfalls.
Ein Speicherleck auf der jboss-Clientseite bei wiederholter Verwendung von UserTransaction.
Zum Beispiel:
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();
}
}
Die Transaktion wird von einem entfernten Client auf einem EJB ausgeführt, das in EAP 7.3 bereitgestellt ist. Die Transaktion wird 50000 Mal iteriert. Am Ende der Iterationen wird ein Speicherleck beobachtet. 32% des Speichers werden von org.wildfly.transaction.client.provider.remoting.TransactionClientChannel belegt.