Почему Modsecurity не запрещает внедрение SQL в полезную нагрузку JSON

У меня есть веб-приложение, работающее за брандмауэром apache/modsecurity, настроенным с OWASP CRS.

Следующий URL-адрес запрещен Modsecurity:

GET /login?username=' /*!or*/1=1#

Но этот проходит через брандмауэр:

POST /login
Body: {"password":"' /*!or*/1=1#"}

Есть ли ограничения Modsecurity в отношении JSON Body?

Tx

ОБНОВЛЕНИЕ 1: у меня развернута последняя версия CSR OWASP:

Producer: ModSecurity for Apache/2.9.2 (http://www.modsecurity.org/); OWASP_CRS/3.1.1.
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips

Правило, которое было запущено с помощью GET, — 942100 («msg»: «Атака с внедрением SQL, обнаруженная через libinjection»). Это правила следующие:

SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|REQUEST_HEADERS:User-Agent|REQUEST_HEADERS:Referer|ARGS_NAMES|ARGS|XML:/* "@detectSQLi" \
    "id:942100,\
    phase:2,\
    block,\
    capture,\
    t:none,t:utf8toUnicode,t:urlDecodeUni,t:removeNulls,\
    msg:'SQL Injection Attack Detected via libinjection',\
    logdata:'Matched Data: %{TX.0} found within %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',\
    tag:'application-multi',\
    tag:'language-multi',\
    tag:'platform-multi',\
    tag:'attack-sqli',\
    tag:'OWASP_CRS/WEB_ATTACK/SQL_INJECTION',\
    tag:'WASCTC/WASC-19',\
    tag:'OWASP_TOP_10/A1',\
    tag:'OWASP_AppSensor/CIE1',\
    tag:'PCI/6.5.2',\
    ver:'OWASP_CRS/3.1.1',\
    severity:'CRITICAL',\
    multiMatch,\
    setvar:'tx.anomaly_score_pl1=+%{tx.critical_anomaly_score}',\
    setvar:'tx.sql_injection_score=+%{tx.critical_anomaly_score}',\
    setvar:'tx.msg=%{rule.msg}',\
    setvar:'tx.%{rule.id}-OWASP_CRS/WEB_ATTACK/SQL_INJECTION-%{MATCHED_VAR_NAME}=%{MATCHED_VAR}'"

ОБНОВЛЕНИЕ 2: Решение: добавьте анализ тела JSON в conf:

SecRule REQUEST_HEADERS:Content-Type "application/json" "id:'200001',phase:1,t:none,t:lowercase,pass,nolog,ctl:requestBodyProcessor=JSON"

Обратите внимание, что в Centos YAJL недоступен в упакованном модуле modsecurity, вам нужно скомпилировать его из исходников, чтобы включить поддержку JSON.


person Nico    schedule 10.09.2019    source источник


Ответы (1)


ModSecurity поддерживает синтаксический анализ тела запроса в формате JSON, начиная с версии 2.8, но его необходимо настроить. Подробнее см. здесь: https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/modsecurity-advanced-topic-of-the-week-json-support/

Однако ModSecurity — это всего лишь фреймворк, который может обрабатывать правила. Вы не указали, какой набор правил вы используете (OWASP CRS, ваши собственные правила? Другое?) и какое правило сработало для запроса GET. Может быть он настроен только для GET-запросов.

person Barry Pollard    schedule 10.09.2019