NginxでCVE-2021-44228(Apache Log4j 2)を狙った攻撃を簡易的にブロック

Apache Log4j 2に深刻な脆弱性 CVE-2021-44228 が見つかりました.アクセスログから管理するサーバへもこの脆弱性を狙った攻撃を観測しました.

Log4jの深刻な脆弱性CVE-2021-44228についてまとめてみた – piyolog

今回はNginxで簡易的に攻撃をブロックしてみます.本質的にはペイロードを任意のヘッダへ追加された場合の対処にはならないため注意が必要です.

環境:

  • Nginx v1.20.1
  • Ubuntu 20.04.3 LTS (Focal Fossa)

設定例

以下は,設定を追加したNginxのConfigの抜粋です.mapを使い攻撃リクエストのペイロードが含まれるURLとUserAgentをパターンマッチでブロックしています.ブロックにはHTTPのステータスコード 444を使いました.

http {
    map $http_user_agent $block_ua_request {
        default 0;
        "~*\${jndi:" 1;
    }
    map $request_uri $block_request {
        default 0;
        "~*\$%7Bjndi:" 1;
    }

    server {
        if ($block_ua_request = 1) {
            return 444;
        }
        if ($block_request = 1) {
            return 444;
        }
    }
}

実際にcurlでリクエストを発行するとリクエストが拒否されていることがわかります.

$ curl "https://blog.koyama.me/$%7Bjndi:xx"
curl: (92) HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)

余談

Qiitaへ記事を投稿しようと試みたところ,WAFにブロックされました.

参考資料

過去のISUCONで知ったNginxのmapを活用できてよかったです.

1件のコメント

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です