EC-CUBE / EC-CUBE/ec-cube2

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

Open
#1,331 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
PHP
Stars
92
Forks
97
Avg merge
4d 2h
Merged PRs (30d)
9

Description

## 概要

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

```php
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` を無効化する:

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

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

## 関連

- #1329

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.