Исследователи обнаружили уязвимость, которая получила имя ParseThru. Баг затрагивает продукты на базе Go и им можно злоупотреблять для получения несанкционированного доступа к облачным приложениям.
Проблему заметили эксперты из израильской компании Oxeye, специализирующейся на безопасности облачных приложений. ParseThru связана с тем, как реализован парсинг URL-адресов в некоторых Go-приложениях. Имплементация создает уязвимости, которые позволят злоумышленникам выполнять вредоносные действия.
Эксперты объясняют, что вплоть до версии 1.17 Go считал точку с запятой в query части URL допустимым разделителем (к примеру: example.com?a=1;b=2&c=3), а после этой версии поведение было изменено, чтобы отображать ошибку при нахождении query-строки, содержащей точку с запятой.
Однако исследователи выяснили, что если пользовательское приложение работает на Go 1.17 или более поздней версии, а связанный с ним бэкэнд работает на более ранней версии Go, злоумышленник может осуществить request smuggling запросов с query параметрами, которые в обычных условиях были бы отклонены. То есть идея заключается в том, чтобы отправлять специально подготовленные запросы, содержащие точку с запятой, которые будут проигнорированы пользовательским API Golang, однако будут обработаны внутренней службой.
Аналитикам Oxeye удалось обнаружить несколько опенсорсных проектов, которые уязвимы перед ParseThru. Среди них: HTTP-маршрутизатор и обратный прокси Skipper, обратный HTTP-прокси и балансировщик нагрузки Traefik, а также проект CNCF Harbour, разработанный для обеспечения безопасности, чтобы образы контейнеров не содержали уязвимостей и были доверенными. В качестве примера исследователи приводят именно Harbour: в его случае уязвимость позволит злоумышленникам читать частные образы Docker с ограниченным доступом, которые в нормальных обстоятельствах были бы им недоступны.
Oxeye уже уведомила о своих выводах разработчиков затронутых приложений, и те выпустили исправления.