はじめに
脆弱性がたまに話題になりますが、一週間の間にいくつの脆弱性が公開されているか知っていますか?
本記事では、2024/04/13~2024/04/19の一週間の間に公開されたCVEの件数とその中で個人的に気になったものについてまとめてみました。
2024/04/13~2024/04/19に公開された脆弱性
概要 | 件数 |
---|---|
公開されたCVEの件数 | 1038件 |
CVSS Base Scoreが7.0以上であるCVEの件数 | 265件 |
今回初めて一週間の間に公開された脆弱性の数を調べてみましたが、想像以上に多いですね。一日に140件程度公開されています。
今回調べた期間中ではありませんが、Palo Alto Networks社PAN-OSの脆弱性(CVE-2024-3400)も4月12日に公開され、話題になっていました。
気になったもの
期間の中で気になった脆弱性について調べました。
CVE-2024-28185
概要
CVSS Base Score:10.0
judge0(Githubのスター数は2000)というオンラインでコードを実行できるOSSでの脆弱性。シンボリックリンク経由でサンドボックスをエスケープできます。
このアプリケーションでは、サンドボックスディレクトリ内に配置されたシンボリックリンクを考慮していなかったため、攻撃者がこれを利用して任意のファイルに書き込み、サンドボックスの外でコードを実行できる可能性がある脆弱性についてです。
詳細
下記はユーザが送信した実行コードを実行するときのコードの一部。
run_script = boxdir + "/" + "run"
unless submission.is_project
# gsub is mandatory!
command_line_arguments = submission.command_line_arguments.to_s.strip.encode("UTF-8", invalid: :replace).gsub(/[$&;<>|`]/, "")
File.open(run_script, "w") { |f| f.write("#{submission.language.run_cmd} #{command_line_arguments}")}
end
judge0では、実行するためのコマンドをrun_scriptに書き込みを行います。攻撃者はrun_scriptにシンボリックリンクを作成でき、f.write
がシステム上の任意のファイルに書き込む可能性があります。
services:
server:
image: judge0/judge0:latest
volumes:
- ./judge0.conf:/judge0.conf:ro
ports:
- "2358:2358"
privileged: true # ← 特権モードのフラグがtrue
<<: *default-logging
restart: always
さらには、docker-compose.yml
では特権フラグを使用してDockerコンテナが実行されているため、攻撃者はLinuxホストファイルシステムをマウントできるようになり、悪意のあるcronジョブなどを書き込んでシステムにアクセスできてしまいます。
対策
脆弱性を修正したversionは公開されています。脆弱性のあるversionは、v1.13.0以下。
対策としては、最新のversionである1.13.1以上にアップデートすることです。
おわりに
コンテナのセキュリティとして特権モードのフラグを立ててはいけないと言われますが、CVE-2024-28185の事例を見て、改めて特権モードでの実行の怖さを実感しました。
何かおかしな点がありましたらご指摘ください!