Podatność w komponentach JMS frameworka Apache Camel umożliwia nieuwierzytelnionemu atakującemu zdalne wykonanie kodu (RCE) poprzez spreparowaną wiadomość JMS ObjectMessage. Brak jakiejkolwiek filtracji klas podczas deserializacji sprawia, że exploit jest możliwy bez żadnych uprawnień po stronie atakującego.
▸ Pokaż oryginał (EN)
JmsBinding.extractBodyFromJms() in camel-jms, and the equivalent JmsBinding class in camel-sjms, deserialized the payload of incoming JMS ObjectMessage values via javax.jms.ObjectMessage.getObject() without applying any ObjectInputFilter, class allowlist or class denylist. Because this code path is reached whenever the mapJmsMessage option is enabled (the default) and Camel acts as a JMS consumer, an attacker able to publish a crafted ObjectMessage to a queue or topic consumed by a Camel application could achieve remote code execution when a deserialization gadget chain was present on the classpath. The same handling was reached transitively through camel-sjms2 (whose Sjms2Endpoint extends SjmsEndpoint) and through camel-amqp (whose AMQPJmsBinding extends JmsBinding), and by other JMS-family components built on JmsComponent such as camel-activemq and camel-activemq6. This issue affects Apache Camel: from 3.0.0 before 4.14.7, from 4.15.0 before 4.18.2, from 4.19.0 before 4.20.0. Users are recommended to upgrade to version 4.20.0, which fixes the issue. If users are on the 4.14.x LTS releases stream, then they are suggested to upgrade to 4.14.7. If users are on the 4.18.x releases stream, then they are suggested to upgrade to 4.18.2.
Metoda JmsBinding.extractBodyFromJms() w modułach camel-jms oraz camel-sjms wywołuje javax.jms.ObjectMessage.getObject() w celu deserializacji ładunku przychodzących wiadomości JMS typu ObjectMessage bez stosowania filtrów wejściowych (ObjectInputFilter), listy dozwolonych ani listy zablokowanych klas. Ścieżka ta jest osiągana domyślnie, gdy opcja mapJmsMessage jest włączona (wartość domyślna) i aplikacja Camel działa jako konsument JMS. Atakujący posiadający możliwość publikowania wiadomości do kolejki lub topiku obsługiwanego przez taką aplikację może dostarczyć spreparowany payload exploitujący dowolny gadget chain deserializacji obecny na classpath. Problem dotyczy również komponentów camel-sjms2, camel-amqp, camel-activemq oraz camel-activemq6, które pośrednio korzystają z podatnych klas JmsBinding.
Skuteczne wykorzystanie podatności pozwala nieuwierzytelnionemu atakującemu na zdalne wykonanie dowolnego kodu (RCE) w kontekście procesu aplikacji Apache Camel, co może prowadzić do pełnego przejęcia kontroli nad serwerem, wycieku danych lub zakłócenia dostępności usługi.
Należy zaktualizować Apache Camel do wersji 4.20.0 (zalecana). Użytkownicy gałęzi LTS 4.14.x powinni zaktualizować do wersji 4.14.7. Użytkownicy gałęzi 4.18.x powinni zaktualizować do wersji 4.18.2. Jako obejście tymczasowe można rozważyć wyłączenie opcji mapJmsMessage lub ograniczenie dostępu do kolejek i topiców JMS wyłącznie do zaufanych nadawców.
Apache Camel w wersjach: od 3.0.0 do (nie włącznie) 4.14.7, od 4.15.0 do (nie włącznie) 4.18.2 oraz od 4.19.0 do (nie włącznie) 4.20.0. Dotyczy komponentów: camel-jms, camel-sjms, camel-sjms2, camel-amqp, camel-activemq, camel-activemq6.
Podatność obejmuje szeroki zakres wersji, poczynając od 3.0.0. Wektor ataku jest sieciowy, nie wymaga uwierzytelnienia ani interakcji użytkownika (AV:N/AC:L/PR:N/UI:N), co czyni ją szczególnie niebezpieczną w środowiskach, gdzie kolejki JMS są dostępne z sieci nieograniczonego zaufania.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HApache Camel
APPApache4.19.03.0.0 – 4.14.7 (bez)4.15.0 – 4.18.2 (bez)
Powiązane podatności
Apache Camel: wstrzyknięcie nagłówków HTTP w camel-cxf i camel-knative (RCE)
Apache Camel — obejście filtrowania nagłówków umożliwiające RCE
Apache Camel: wstrzyknięcie nagłówków przez komponent Camel-Mail
Apache Camel camel-coap: RCE poprzez wstrzyknięcie nagłówków Camel
Apache Camel: pominięcie weryfikacji issuer JWT w KeycloakSecurityPolicy