Skip to content

OSTORE_URL がローカルホストの場合に SSRF 保護でブロックされる #1331

@nanasess

Description

@nanasess

概要

PR #1329 で HTTP_Request を Guzzle ベースに書き換えた際、SSRF 保護がデフォルトで有効化されました。
これにより、OSTORE_URLlocalhost127.0.0.1 等のプライベート IP に設定されている場合、LC_Page_Upgrade_Base::request() での HTTP リクエストが PEAR_Error (code: HTTP_REQUEST_ERROR_SSRF = 512) でブロックされます。

再現条件

  • OSTORE_URLhttps://localhost:4430/test 等のローカルホストに設定されている場合
  • デフォルト設定(ssrfProtection = true)のまま sendRequest() が呼ばれる

本番環境への影響

  • OSTORE_URL のデフォルト値は https://www.ec-cube.net/ のため、本番環境では影響なし
  • 開発・テスト環境でローカルホストを指定している場合にのみ発生

該当コード

https://github.com/EC-CUBE/ec-cube2/blob/master/data/class/pages/upgrade/LC_Page_Upgrade_Base.php#L55-L75

public function request($mode, $arrParams = [], $arrCookies = [])
{
    $objReq = new HTTP_Request();
    $objReq->setUrl(OSTORE_URL.'upgrade/index.php');
    // ...
    $e = $objReq->sendRequest();  // OSTORE_URL が localhost の場合 SSRF でブロック
}

対応案

HTTP_Request のコンストラクタで ssrfProtection を無効化する:

$objReq = new HTTP_Request('', ['ssrfProtection' => false]);

OSTORE_URL は管理者が設定する信頼済みの接続先であるため、SSRF 保護の対象外とする方針が妥当と考えられます。

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions