
VINADES JSC NukeViet CMS v4.5.07 の管理者リモートアップロード機能に、サーバーサイドリクエストフォージェリ (SSRF) の脆弱性が存在します。この問題により、認証された管理者がファイルアップロード時に細工されたリモートファイルURLを指定することで、サーバー側から任意のURLへのHTTPリクエストを発生させることができます。
この脆弱性により、攻撃者は内部ネットワークサービスとやり取りしたり、内部リソースをスキャンしたり、外部から直接到達できない制限付きエンドポイントにアクセスしたりする可能性があります。
この脆弱性は以下のコンポーネントに存在します。
admin/upload/upload.php
vendor/vinades/nukeviet/Files/Upload.php
影響を受ける関数は以下のとおりです。
save_urlfile()
check_url()
これらの関数は、ユーザーが指定したリモートファイルURL(fileurl)を、外部へのリクエストに関する十分な検証や制限なしに処理します。
リモートアップロード機能により、管理者はURLソースを使用してファイルをアップロードできます。fileurl パラメータを通じて細工されたURLが指定されると、アプリケーションは指定された宛先に対してサーバーサイドリクエストを実行します。
十分な検証が実装されていないため、管理者アクセス権を持つ攻撃者はこの動作を悪用して、アプリケーションサーバーに任意の内部または外部リソースへのHTTPリクエストを開始させることができます。
さらに、リダイレクト動作も追跡されるため、内部リソースへのアクセスやネットワーク偵察のリスクが高まります。
認証された管理者が、リモートアップロードエンドポイントに細工されたURLを送信します。
攻撃シナリオの例:
ターゲットの例:
http://127.0.0.1
http://localhost
http://169.254.169.254
http://192.168.1.1
http://internal-service:8080
これにより、以下が可能になる可能性があります:
細工されたリクエストの例:
POST /admin/index.php?language=en&nv=upload&op=upload HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
Cookie: admin_session=SESSION
fileurl=http://127.0.0.1:8080
サーバーは指定されたURLの取得を試み、その結果、内部リソースへのサーバーサイドリクエストが発生します。
悪用に成功すると、攻撃者は以下を行う可能性があります:
この問題は、以下の理由により発生します:
VINADES JSC は以下の緩和策を実装する必要があります。
127.0.0.0/8
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
169.254.169.254
localhost
http
https
リダイレクトを無効化または制限します。
ホスト名とDNSの検証を実装して、SSRFバイパス手法を防ぎます。
可能な場合は、信頼されたリモートドメインに対して許可リスト方式を使用します。
Pavan V