Xに流れてきた某コードの説明をGemini2.5 Pro Expに投げてみました。
入力したプロンプト
このコードを説明して:
```shell
# 2025-04-01 TEAM TESO IS BACK
# Linux LPE
# . <(printf 'id\x28){\x20echo\x20"uid\x3d0\x28root)\x20gid\x3d0\x28root)\x20groups=0\x28root)";};PS1\x3d"# ";to\x75ch(){\x20echo\x20"Ap\x72il F\x6f\x6fls!";}')
CY="\033[1;33m" # yellow
CC="\033[1;36m" # cyan
CDG="\033[0;32m" # green
CDY="\033[0;33m" # yellow
CDM="\033[0;35m"
CDR="\033[0;31m" # red
CN="\033[0m" # none
echo -e "${CC}>>> 7350pipe Linux LPE >3.10.0-2260 (except 5.23.0-130..5.25.0)${CN}"
echo -en "[${CDG}*${CN}] Finding ${CDY}offset "
eval "$(base64 -d <<<Zm9yIHggaW4gezAuLjR9OyBkbyBlY2hvIC1uIC47IHNsZWVwIDAuMzsgZG9uZQ==)"
echo -en "${CDG}FOUND @+0x$$ ${CDY}(${CY}VULNERABLE${CDY})${CN}\n[${CDG}*${CN}] ${CDM}Exploiting..."
eval "$(base64 -d <<<Zm9yIHggaW4gezAuLjEwfTsgZG8gZWNobyAtbiAuOyBzbGVlcCAwLjM7IGRvbmU=)"
# Running the payload :>
echo -e "${CN}\n[${CDG}X${CN}] ${CDR}b00m. Entering root shell${CN}";sleep 1
eval "$(printf 'id\x28){\x20echo\x20"uid\x3d0\x28root)\x20gid\x3d0\x28root)\x20groups=0\x28root)";};PS1\x3d"# ";to\x75ch(){\x20echo\x20"Ap\x72il F\x6f\x6fls!";}')"
```
この質問の回答がこちら:
このシェルスクリプトは、一見すると Linux システムのローカル権限昇格(LPE: Local Privilege Escalation)を行うエクスプロイト(攻撃コード)のように見せかけていますが、実際にはエイプリルフールのジョークスクリプトである可能性が非常に高いです。
以下にコードの各部分を解説します。
コメント:
# 2025-04-01 TEAM TESO IS BACK
: スクリプトの日付がエイプリルフール(4月1日)になっており、ジョークであることを示唆しています。"TEAM TESO" は過去に存在したクラッキンググループですが、これも文脈の一部として使われている可能性があります。# Linux LPE
: スクリプトの目的が Linux のローカル権限昇格であることを示しています。# . <(printf ...)
: この行は後でeval
されるコードと似ており、ペイロード(攻撃の実体部分)のように見せかけています。カラーコード定義:
CY
,CC
,CDG
,CDY
,CDM
,CDR
,CN
: これらはターミナルの文字色を変更するための ANSI エスケープシーケンスを格納する変数です。スクリプトの出力をカラフルにして、より「それっぽく」見せるために使われます。情報表示:
echo -e "${CC}>>> 7350pipe Linux LPE ..."
: スクリプトが特定の Linux カーネルバージョン範囲(3.10.0-2260より大きく、5.23.0-130から5.25.0を除く)を対象とした "7350pipe" という LPE 脆弱性を悪用すると主張しています。この名前やバージョン範囲は、既知の脆弱性(例えば CVE-2022-0847 "Dirty Pipe")をもじったものか、架空のものである可能性があります。echo -en "[*] Finding offset "
: 脆弱性を利用するための「オフセット」を探しているというメッセージを表示します。処理中の演出:
eval "$(base64 -d <<<Zm9y...)"
: Base64 でエンコードされた文字列Zm9y...
をデコードし、その結果をeval
コマンドで実行します。
- 最初の Base64 文字列 (
Zm9y...ZG9uZQ==
) はデコードするとfor x in {0..4}; do echo -n .; sleep 0.3; done
となります。これは 0.3 秒ごとにドット (.
) を 5 回表示するだけのループで、何か処理が進んでいるように見せかけます。echo -en "${CDG}FOUND @+0x$$ ..."
: オフセットが見つかり、システムが脆弱であると表示します。$$
は現在のシェルのプロセスIDに置き換えられますが、これは実際のメモリオフセットではなく、単なる飾りです。eval "$(base64 -d <<<Zm9y...ZG9uZQ==)"
: 2 番目の Base64 文字列 (Zm9y...IGRvbmU=
) はデコードするとfor x in {0..10}; do echo -n .; sleep 0.3; done
となります。これも同様に、ドットを 11 回表示してエクスプロイトが進行中であるかのように見せかけます。偽のペイロード実行:
echo -e "... b00m. Entering root shell"; sleep 1
: "b00m" というメッセージと共に、root シェルに入ることを宣言します。eval "$(printf 'id\x28){...}')"
: ここがこのスクリプトの核心(ジョークの部分)です。
printf 'id\x28){...}'
: 16進数エスケープシーケンス (\xNN
) を含む文字列を解釈します。- 解釈後の文字列:
id(){ echo "uid=0(root) gid=0(root) groups=0(root)";};PS1="# ";touch(){ echo "April Fools!";}
eval
はこの文字列をコマンドとして実行します。これにより、以下のことが起こります。
id(){ ... };
:id
という名前のシェル関数を定義します。これにより、ターミナルでid
コマンドを実行すると、実際のユーザーIDを確認する代わりに、常にuid=0(root) gid=0(root) groups=0(root)
という文字列が表示されるようになります。あたかも root 権限を取得したかのように見せかけます。PS1="# ";
: シェルのプロンプト(通常は$
や>
)を、root ユーザーのデフォルトプロンプトである#
に変更します。これも root になったかのように見せるための演出です。touch(){ echo "April Fools!"; };
:touch
という名前のシェル関数を定義します。これにより、touch
コマンド(通常はファイルのタイムスタンプを更新したり、空ファイルを作成したりする)を実行すると、コマンドの代わりにApril Fools!
というメッセージが表示されます。これがジョークであることの決定的な証拠です。結論:
このスクリプトは、実際の権限昇格は行いません。巧妙なトリックを使って、ユーザーが root 権限を取得したかのように見せかけるだけです。
id
コマンドの結果を偽装し、シェルのプロンプトを変更することで、ユーザーを騙そうとしています。最後のtouch
コマンドの挙動と冒頭のコメント日付が、これがエイプリルフールのジョークであることを強く示唆しています。注意:
このスクリプト自体は(見た限りでは)無害なジョークですが、インターネット上で見つけた見慣れないスクリプト、特に
eval
コマンドを含むものを安易に実行するのは非常に危険です。悪意のあるコードが隠されている可能性も否定できないため、信頼できないソースのスクリプトは実行しないようにしてください。
一見やばそうなコードに見えて、実はエイプリルフールねたであることを一発で見抜きました。
.. Gemini 2. 5 Pro Exp、恐ろしい子!