概要
PR #1329 で HTTP_Request を Guzzle ベースに書き換えた際、SSRF 保護がデフォルトで有効化されました。
これにより、OSTORE_URL が localhost や 127.0.0.1 等のプライベート IP に設定されている場合、LC_Page_Upgrade_Base::request() での HTTP リクエストが PEAR_Error (code: HTTP_REQUEST_ERROR_SSRF = 512) でブロックされます。
再現条件
OSTORE_URL が https://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 保護の対象外とする方針が妥当と考えられます。
関連
概要
PR #1329 で HTTP_Request を Guzzle ベースに書き換えた際、SSRF 保護がデフォルトで有効化されました。
これにより、
OSTORE_URLがlocalhostや127.0.0.1等のプライベート IP に設定されている場合、LC_Page_Upgrade_Base::request()での HTTP リクエストがPEAR_Error(code:HTTP_REQUEST_ERROR_SSRF = 512) でブロックされます。再現条件
OSTORE_URLがhttps://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
対応案
HTTP_RequestのコンストラクタでssrfProtectionを無効化する:OSTORE_URLは管理者が設定する信頼済みの接続先であるため、SSRF 保護の対象外とする方針が妥当と考えられます。関連