Zusammenfassung
Ungültige Eingabevalidierung, Autorisierungsumgehung durch benutzergesteuerten Schlüssel in Apache Camel ElasticSearch Rest Client. Die Komponente camel-elasticsearch-rest-client liest mehrere Exchange-Header, um ihr Verhalten zu steuern – SEARCH_QUERY (ein erweiterter Abfragetext), OPERATION (welche Elasticsearch-Operation ausgeführt werden soll), INDEX_NAME, INDEX_SETTINGS und ID. Die String-Werte dieser Header-Konstanten, definiert in ElasticSearchRestClientConstant, sind einfache Namen ohne Präfix ('SEARCH_QUERY', 'OPERATION', 'INDEX_NAME', 'INDEX_SETTINGS', 'ID') und nicht die mit 'Camel' präfixierten Namen, die von jeder anderen Camel-Komponente verwendet werden (zum Beispiel CamelSqlQuery, CamelMongoDbCriteria, CamelCqlQuery). Der eingehende HTTP-Header-Filter von Camel, HttpHeaderFilterStrategy, blockiert nur Header-Namen, die mit 'Camel' oder 'camel' beginnen. Da die Elasticsearch-Header-Namen dieses Präfix nicht tragen, passieren sie den eingehenden Filter unverändert. Wenn eine Camel-Route einen HTTP-Einstiegspunkt (zum Beispiel platform-http) vor einem elasticsearch-rest-client-Producer bereitstellt, kann ein nicht vertrauenswürdiger HTTP-Client diese Header direkt in seiner Anfrage setzen und die vom Routenautor konfigurierte Abfrage und Operation überschreiben: Lesen jedes Dokuments im Index (SEARCH_QUERY mit einer match_all-Abfrage), Löschen von Dokumenten (OPERATION auf Delete gesetzt zusammen mit ID) oder Exfiltration ausgewählter Felder. Es sind keine Anmeldeinformationen erforderlich und der Producer liest die Header bedingungslos. Dieses Problem betrifft Apache Camel: von 4.3.0 vor 4.14.8, von 4.15.0 vor 4.18.3, von 4.19.0 vor 4.21.0. Benutzern wird empfohlen, auf Version 4.21.0 zu aktualisieren, die das Problem behebt. Wenn Benutzer auf dem 4.14.x-LTS-Release-Stream sind, wird empfohlen, auf 4.14.8 zu aktualisieren. Wenn Benutzer auf dem 4.18.x-Release-Stream sind, wird empfohlen, auf 4.18.3 zu aktualisieren. Der Fix benennt die String-Werte der Exchange-Header-Konstanten der camel-elasticsearch-rest-client (ID, SEARCH_QUERY, INDEX_SETTINGS, INDEX_NAME, OPERATION) um, sodass sie das Camel-Präfix tragen (CamelElasticsearchId, CamelElasticsearchSearchQuery, CamelElasticsearchIndexSettings, CamelElasticsearchIndexName, CamelElasticsearchOperation), damit sie vom eingehenden HttpHeaderFilterStrategy blockiert werden; die Java-Feldnamen bleiben unverändert. Für Bereitstellungen, die nicht sofort aktualisieren können, entfernen Sie die betroffenen Header aus nicht vertrauenswürdigen eingehenden Nachrichten, bevor sie den Producer erreichen (zum Beispiel removeHeader('SEARCH_QUERY'), removeHeader('OPERATION'), removeHeader('INDEX_NAME'), removeHeader('INDEX_SETTINGS') und removeHeader('ID') vor dem elasticsearch-rest-client-Endpunkt), oder wenden Sie eine benutzerdefinierte HeaderFilterStrategy an, die diese Namen blockiert.