Metacat — это программное обеспечение для хранения данных, которое помогает исследователям сохранять, обмениваться и обнаруживать данные. Версии с 2.x по 2.19.1 и все версии 1.x содержат обход пути без аутентификации в параметре archiveEntryName конечной точки action=read, который является частью исходного API Metacat 1.x. `ArchiveHandler.readArchiveEntry()` объединяет предоставленный пользователем параметр в путь файловой системы без проверки, а окружающая проверка `hasReadPermission()` закомментируется. Удаленный злоумышленник, не прошедший проверку подлинности, может прочитать любой файл, доступный процессу Tomcat, отправив один запрос GET.
Эксплойты для проверки концепции были продемонстрированы и проверены против этой уязвимости, и ее следует считать легко используемой для любого развертывания Metacat < 3.0.0 любым пользователем, имеющим доступ к API 1.x. Из-за этой уязвимости развертывания рабочей версии 2.x подвергаются краже учетных данных, сертификатов клиентов и краже закрытых ключей, что позволяет выдавать себя за членский узел внутри федерации, раскрывать запрещенные исследовательские данные и проводить широкую разведку системы. Учитывая масштабы развертывания Metacat в сети репозиториев DataONE и исследовательских программах, финансируемых из федерального бюджета, количество открытых экземпляров 2.x нетривиально.
Уязвимость была устранена в версии Metacat 3.0.0 и последующих версиях путем устранения всего API Metacat 1.x, который подвергал эту уязвимость. Уязвимость была устранена в апреле 2024 года с выпуском Metacat 3.0.0, в котором был удален устаревший API Metacat, включая ArchiveHandler.java. Сообщение о фиксации и справочная архитектурная очистка проблемы, а не исправление безопасности, а также никаких рекомендаций или CVE не было выпущено.
Ветка 2.x не была и не будет перенесена, как это является стандартной практикой в Metacat, который поддерживает только самую последнюю версию. 2.19.1 остается уязвимой с идентичным кодом и срок ее поддерживаемого существования истек. В качестве обходного пути отключите или ограничьте сервлеты API версии 1.x. Поскольку уязвимый API 1.x больше не используется или не требуется в большинстве развертываний Metacat, ограничение доступа к конечным точкам старого API может уменьшить или устранить уязвимость для развертываний 2.19.x.
После удаления этих функций перезапустите Tomcat или другое программное обеспечение, в котором размещены сервлеты.
Показать оригинальное описание (EN)
Metacat is data repository software that helps researchers preserve, share, and discover data. Versions 2.x through 2.19.1 and all 1.x versions contain an unauthenticated path traversal in the `archiveEntryName` parameter of the `action=read` endpoint that is part of the original 1.x Metacat API. `ArchiveHandler.readArchiveEntry()` concatenates the user-supplied parameter into a filesystem path without validation, and the surrounding `hasReadPermission()` check is commented out. An unauthenticated remote attacker can read any file accessible to the Tomcat process by sending a single GET request. Proof-of-concept exploits have been demonstrated and verified against this vulnerability, and it should be considered easily exploitable for any Metacat deployment < 3.0.0 by any user with access to the 1.x API. Through this vulnerability, production 2.x deployments are exposed to credential theft, client certificate and private key exfiltration enabling member node impersonation within the federation, embargoed research data disclosure, and broad system reconnaissance. Given Metacat's deployment footprint across the DataONE network of repositories and federally funded research programs, the population of exposed 2.x instances is non-trivial. The vulnerability was eliminated in Metacat version 3.0.0 and after by eliminating the entire Metacat 1.x API that exposed this vulnerability. The vulnerability was remediated in April 2024 with the release of Metacat 3.0.0, which removed the legacy Metacat API including ArchiveHandler.java. The commit message and issue reference architectural cleanup, not a security fix, and no advisory or CVE was issued. The 2.x branch was not and will not be backported, as is standard practice in Metacat, which only supports the most current release. 2.19.1 remains vulnerable with identical code and is beyond its supported lifetime. As a workaround, disable or restrict 1.x API servlets. Because the vulnerable 1.x API is no longer used or necessary in most Metacat deployments, restricting access to the old API endpoints can reduce or eliminate exposure for 2.19.x deployments. After removing those features, restart Tomcat or whichever software is hosting the servlets.
Характеристики атаки
Последствия
Строка CVSS v3.1