OSTORE_URL がローカルホストの場合に SSRF 保護でブロックされる
- 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.