В популярном опенсорсном IPsec-решении StrongSwan устранили опасную проблему в парсере EAP-TTLS AVP. Баг позволял атакующему удаленно и без аутентификации вызвать сбой VPN-сервиса, просто отправив специально сформированный пакет. Проблема затрагивала все релизы за последние 15 лет и могла эксплуатироваться удаленно, без аутентификации.
StrongSwan — кроссплатформенное решение для построения VPN на базе IPsec, работающее в Windows, Linux, macOS, Android и других платформах. Его широко применяют в корпоративной среде для шифрования трафика и аутентификации клиентов и серверов.
Среди поддерживаемых методов аутентификации есть EAP-TTLS (Extensible Authentication Protocol-Tunneled Transport Layer Security). Он передает аутентификационные данные через TLS-туннель с помощью так называемых пар «атрибут-значение» (Attribute-Value Pairs, AVP). Именно в парсере этих пар и нашли уязвимость.
На прошлой неделе разработчики StrongSwan предупредили, что баг затрагивает все версии с 4.5.0 по 6.0.4, то есть релизы, выходившие на протяжении последних 15 лет. По их словам, уязвимость связана с integer underflow: парсер не проверяет поле длины AVP перед вычитанием, и для значений от 0 до 7 происходит underflow 32-битного целого.
«Атакующие могут воспользоваться отсутствием валидации поля длины AVP до операции вычитания, чтобы спровоцировать чрезмерное выделение памяти или разыменование нулевого указателя, что приведет к сбою IKE-демона charon», — говорится в бюллетене безопасности NIST.
Как поясняют разработчики StrongSwan, если выделение огромного блока памяти проходит успешно, система упирается в исчерпание ресурсов. Если же аллокация не удается, процесс получает null-pointer dereference и аварийно завершается с segmentation fault.
Подробности эксплуатации этой уязвимости раскрыли исследователи из компании Bishop Fox, которые и обнаружили баг. По их словам, для успешной атаки нужны всего два пакета: первый повреждает хип, а второй вызывает сбой демона. Причем момент сбоя зависит от того, как система обрабатывает заведомо невыполнимый запрос на выделение памяти. В одних случаях аллокатор сразу возвращает NULL, в других — демон «падает» лишь тогда, когда поврежденные структуры используются в следующем запросе.
Уязвимость была устранена в StrongSwan версии 6.0.5: теперь парсер заранее проводит валидацию значения длины AVP. Администраторам, которые используют StrongSwan в продакшен-инфраструктуре, рекомендуется как можно скорее установить обновление.
