hacktricks/pentesting-web/browser-extension-pentesting-methodology/browext-permissions-and-host_permissions.md

119 lines
11 KiB
Markdown
Raw Normal View History

2024-02-10 21:30:13 +00:00
# BrowExt - 권한 및 호스트 권한
<details>
2024-02-10 21:30:13 +00:00
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요<strong>!</strong></summary>
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2023-12-31 01:25:17 +00:00
2024-02-10 21:30:13 +00:00
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요.
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github 저장소에 PR을 제출**하세요.
</details>
2024-02-10 21:30:13 +00:00
## 기본 정보
### **`permissions`**
2024-02-10 21:30:13 +00:00
권한은 확장 프로그램의 **`manifest.json`** 파일에서 **`permissions`** 속성을 사용하여 브라우저가 액세스할 수 있는 거의 모든 것 (쿠키 또는 물리적 저장소)에 액세스할 수 있도록 정의됩니다:
2024-02-10 21:30:13 +00:00
이전 manifest는 확장 프로그램이 `storage` 권한을 필요로 한다고 선언합니다. 이는 확장 프로그램이 [저장소 API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage)를 사용하여 데이터를 영구적으로 저장할 수 있음을 의미합니다. 사용자에게 일부 수준의 제어권을 부여하는 쿠키 또는 `localStorage` API와 달리, **확장 프로그램 저장소는 일반적으로 확장 프로그램을 제거하여만 지울 수 있습니다**.
2024-02-10 21:30:13 +00:00
확장 프로그램은 **`manifest.json`** 파일에서 지정된 권한을 요청하며, 확장 프로그램을 설치한 후에는 브라우저에서 항상 해당 권한을 확인할 수 있습니다. 다음 이미지와 같이:
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
2024-02-10 21:30:13 +00:00
[**Chromium 브라우저 확장 프로그램이 요청할 수 있는 권한의 완전한 목록을 여기에서 찾을 수 있습니다**](https://developer.chrome.com/docs/extensions/develop/concepts/declare-permissions#permissions) 및 [**Firefox 확장 프로그램을 위한 완전한 목록은 여기에서 찾을 수 있습니다**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions#api\_permissions)**.**
### `host_permissions`
2024-02-10 21:30:13 +00:00
선택적이지만 강력한 설정인 **`host_permissions`**은 [`cookies`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies), [`webRequest`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest) 및 [`tabs`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs)와 같은 API를 통해 확장 프로그램이 상호 작용할 수 있는 호스트를 지정합니다.
2024-02-10 21:30:13 +00:00
다음 `host_permissions`은 기본적으로 모든 웹에 대해 허용합니다:
```json
"host_permissions": [
2024-02-10 21:30:13 +00:00
"*://*/*"
]
// Or:
"host_permissions": [
2024-02-10 21:30:13 +00:00
"http://*/*",
"https://*/*"
]
// Or:
"host_permissions": [
2024-02-10 21:30:13 +00:00
"<all_urls>"
]
```
2024-02-10 21:30:13 +00:00
이것은 브라우저 확장 프로그램이 자유롭게 액세스 할 수 있는 호스트입니다. 이는 브라우저 확장 프로그램이 **`fetch("https://gmail.com/")`**을 호출할 때 CORS에 의해 제한되지 않기 때문입니다.
2024-02-10 21:30:13 +00:00
## `permissions` 및 `host_permissions`의 남용
2024-02-10 21:30:13 +00:00
### 탭
2024-02-10 21:30:13 +00:00
또한, **`host_permissions`**은 "고급" [**탭 API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) **기능을 해제**합니다. 이를 통해 확장 프로그램은 [tabs.query()](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/query)를 호출하여 사용자의 브라우저 탭 목록을 얻을 뿐만 아니라 로드된 웹 페이지(주소 및 제목)도 알 수 있습니다.
{% hint style="danger" %}
2024-02-10 21:30:13 +00:00
뿐만 아니라 [**tabs.onUpdated**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/onUpdated)와 같은 리스너도 훨씬 유용해집니다. 이들은 새로운 페이지가 탭에 로드될 때마다 알림을 받습니다.
{% endhint %}
2024-02-10 21:30:13 +00:00
### 콘텐츠 스크립트 실행 <a href="#running-content-scripts" id="running-content-scripts"></a>
2024-02-10 21:30:13 +00:00
콘텐츠 스크립트는 확장 프로그램 매니페스트에 정적으로 작성되지 않아도 됩니다. 충분한 **`host_permissions`**이 제공되면, 확장 프로그램은 [**tabs.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/executeScript) 또는 [**scripting.executeScript()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/scripting/executeScript)를 호출하여 동적으로 로드할 수도 있습니다.
2024-02-10 21:30:13 +00:00
두 API 모두 확장 프로그램에 포함된 파일뿐만 아니라 임의의 코드도 실행할 수 있습니다. 전자는 JavaScript 코드를 문자열로 전달하는 반면, 후자는 주입 취약점에 취약하지 않은 JavaScript 함수를 기대합니다. 그러나 두 API 모두 잘못 사용하면 큰 문제를 일으킬 수 있습니다.
{% hint style="danger" %}
2024-02-10 21:30:13 +00:00
위에서 언급한 기능 외에도, 콘텐츠 스크립트는 웹 페이지에 입력된 자격 증명을 가로챌 수 있습니다. 또한, 모든 웹 사이트에 광고를 주입하는 것과 같이 남용할 수도 있습니다. 뉴스 웹 사이트의 신뢰성을 남용하기 위해 **사기 메시지**를 추가하는 것도 가능합니다. 마지막으로, 은행 웹 사이트를 조작하여 자금 이체를 재지정할 수도 있습니다.
{% endhint %}
2024-02-10 21:30:13 +00:00
### 암묵적 권한 <a href="#implicit-privileges" id="implicit-privileges"></a>
2024-02-10 21:30:13 +00:00
일부 확장 프로그램 권한은 **명시적으로 선언할 필요가 없습니다**. 예를 들어, [탭 API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs)는 기본 기능이 권한 없이도 액세스할 수 있습니다. 어떤 확장 프로그램이든 탭이 열리고 닫힐 때 알림을 받을 수 있지만, 어떤 웹 사이트와 관련된 탭인지는 알 수 없습니다.
2024-02-10 21:30:13 +00:00
너무 무해해 보이나요? [tabs.create() API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/create)는 다소 그렇지 않습니다. 이는 새로운 탭을 생성하는 데 사용될 수 있으며, 사실상 [window.open()](https://developer.mozilla.org/en-US/docs/Web/API/Window/open)과 동일한 기능을 합니다. 그러나 `window.open()`은 팝업 차단기의 영향을 받지만, `tabs.create()`는 그렇지 않습니다.
{% hint style="danger" %}
2024-02-10 21:30:13 +00:00
확장 프로그램은 원하는 때에 얼마든지 탭을 생성할 수 있습니다.
{% endhint %}
2024-02-10 21:30:13 +00:00
`tabs.create()` 매개변수를 살펴보면, 이 API가 `window.open()`에서 허용되는 것보다 훨씬 더 많은 기능을 제어할 수 있음을 알 수 있습니다. Firefox는 이 API에서 `data:` URI 사용을 허용하지 않지만, Chrome에는 이러한 보호 기능이 없습니다. **이러한 URI를 최상위 수준에서 사용하는 것은** [**사기 행위로 남용되어 금지되었습니다**](https://bugzilla.mozilla.org/show\_bug.cgi?id=1331351)**.**
2024-02-10 21:30:13 +00:00
[**tabs.update()**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs/update)는 `tabs.create()`와 매우 유사하지만 **기존 탭을 수정**합니다. 따라서 악성 확장 프로그램은 예를 들어 광고 페이지를 임의로 탭에 로드할 수 있으며 해당 탭을 활성화할 수도 있습니다.
2024-02-10 21:30:13 +00:00
### 웹캠, 지리적 위치 및 기타 <a href="#webcam-geolocation-and-friends" id="webcam-geolocation-and-friends"></a>
2024-02-10 21:30:13 +00:00
웹 사이트는 웹캠(비디오 회의 도구) 또는 지리적 위치(지도)에 액세스하기 위해 특별한 권한을 요청할 수 있다는 것을 아실 것입니다. 이는 남용 가능성이 큰 기능이므로 사용자는 매번 이를 확인해야 합니다.
{% hint style="danger" %}
2024-02-10 21:30:13 +00:00
그러나 브라우저 확장 프로그램은 그렇지 않습니다. 브라우저 확장 프로그램이 **웹캠이나 마이크에 액세스하려면** [**한 번만 권한을 요청하면 됩니다**](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)**
{% endhint %}
2024-02-10 21:30:13 +00:00
일반적으로, 확장 프로그램은 설치 직후에 이를 수행합니다. 이 프롬프트이 허용되면, **웹캠 액세스는 언제든지 가능**하며, 사용자가 확장 프로그램과 상호 작용하지 않는 경우에도 가능합니다. 사용자는 확장 프로그램이 비밀리에 무언가를 기록하지 않도록 신뢰해야 합니다.
2024-02-10 21:30:13 +00:00
[정확한 지리적 위치](https://developer.mozilla.org/en-US/docs/Web/API/Geolocation) 또는 [클립보드의 내용](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard\_API)에 액세스하는 경우, 명시적으로 권한을 부여할 필요가 없습니다. **확장 프로그램은 단순히 매니페스트의** [**permissions 항목**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions) **에 `geolocation` 또는 `clipboard`를 추가하기만 하면 됩니다. 이러한 액세스 권한은 확장 프로그램이 설치될 때 암묵적으로 부여됩니다. 따라서 이러한 권한을 가진 악성 또는 침해된 확장 프로그램은 사용자가 아무것도 알지 못하는 상태에서 이동 프로필을 생성하거나 복사된 암호를 모니터링할 수 있습니다.
2024-02-10 21:30:13 +00:00
확장 프로그램 매니페스트의 [permissions 항목](https://developer.mozilla.org/en-US/docs/M
## **참고 자료**
2024-02-10 21:30:13 +00:00
* [https://palant.info/2022/08/17/extension-privileges의-영향](https://palant.info/2022/08/17/extension-privileges의-영향)
* [https://www.cobalt.io/blog/chrome-browser-extension-security-testing-소개](https://www.cobalt.io/blog/chrome-browser-extension-security-testing-소개)
<details>
2024-02-10 21:30:13 +00:00
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로에서 영웅까지 AWS 해킹 배우기**<strong>!</strong></summary>
2024-02-10 21:30:13 +00:00
HackTricks를 지원하는 다른 방법:
2023-12-31 01:25:17 +00:00
2024-02-10 21:30:13 +00:00
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요.
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFT**](https://opensea.io/collection/the-peass-family) 컬렉션입니다.
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)을 **팔로우**하세요.
* **Hacking 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
</details>