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

15 KiB

BrowExt - 권한 및 호스트_권한

htARTE (HackTricks AWS Red Team Expert)를 통해 **제로부터 영웅까지 AWS 해킹을 배우세요**!

HackTricks를 지원하는 다른 방법:

기본 정보

permissions

권한은 확장 프로그램의 manifest.json 파일에서 permissions 속성을 사용하여 정의되며 브라우저가 액세스할 수 있는 거의 모든 것에 액세스를 허용합니다(쿠키 또는 물리적 저장소):

이전 manifest는 확장 프로그램이 storage 권한이 필요하다고 선언합니다. 이는 확장 프로그램이 저장소 API를 사용하여 데이터를 영구적으로 저장할 수 있음을 의미합니다. 사용자에게 일부 제어 수준을 제공하는 쿠키나 localStorage API와 달리, 확장 프로그램 저장소는 일반적으로 확장 프로그램을 제거함으로써만 지울 수 있습니다.

확장 프로그램은 manifest.json 파일에서 지정된 권한을 요청하며 확장 프로그램을 설치한 후에는 브라우저에서 항상 해당 권한을 확인할 수 있습니다. 아래 이미지에서 보여지는 것처럼:

크로미움 브라우저 확장 프로그램이 요청할 수 있는 권한의 완전한 목록은 여기에서 확인할 수 있습니다파이어폭스 확장 프로그램을 위한 완전한 목록은 여기에서 확인할 수 있습니다.

host_permissions

선택적이지만 강력한 설정인 **host_permissions**은 확장 프로그램이 cookies, webRequest, 및 tabs와 같은 API를 통해 상호 작용할 수 있는 호스트를 나타냅니다.

다음 host_permissions은 기본적으로 모든 웹을 허용합니다:

"host_permissions": [
"*://*/*"
]

// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]

// Or:
"host_permissions": [
"<all_urls>"
]

브라우저 확장 프로그램이 자유롭게 액세스할 수 있는 호스트입니다. 이는 브라우저 확장 프로그램이 **fetch("https://gmail.com/")**을 호출할 때 CORS에 의해 제한되지 않기 때문입니다.

permissionshost_permissions 남용

또한 **host_permissions**은 "고급" 탭 API 기능을 해제합니다. 이를 통해 확장 프로그램은 tabs.query()를 호출하여 사용자의 브라우저 탭 목록을 얻을 뿐만 아니라 로드된 웹 페이지(주소 및 제목)를 알 수 있습니다.

{% hint style="danger" %} 뿐만 아니라 tabs.onUpdated와 같은 리스너도 훨씬 더 유용해집니다. 이들은 새로운 페이지가 탭에 로드될 때마다 알림을 받습니다. {% endhint %}

콘텐츠 스크립트 실행

콘텐츠 스크립트는 일반적으로 확장 프로그램 매니페스트에 정적으로 작성되지 않습니다. 충분한 **host_permissions**이 제공된다면, 확장 프로그램은 tabs.executeScript() 또는 scripting.executeScript() 를 호출하여 동적으로 로드할 수도 있습니다.

두 API 모두 확장 프로그램에 포함된 파일뿐만 아니라 임의의 코드를 실행할 수 있습니다. 전자는 JavaScript 코드를 문자열로 전달하는 반면, 후자는 주입 취약점에 적게 노출되는 JavaScript 함수를 예상합니다. 그러나 두 API 모두 오용될 경우 큰 문제를 일으킬 수 있습니다.

{% hint style="danger" %} 위의 기능 외에도 콘텐츠 스크립트는 예를 들어 웹 페이지에 입력된 자격 증명을 가로챌 수 있습니다. 이들을 남용하는 또 다른 전형적인 방법은 각 웹 사이트에 광고를 삽입하는 것입니다. 뉴스 웹 사이트의 신뢰도를 남용하기 위해 사기 메시지를 추가하는 것도 가능합니다. 마지막으로, 은행 웹 사이트를 조작하여 자금 이체를 재지정할 수도 있습니다. {% endhint %}

암시적 권한

일부 확장 프로그램 권한은 명시적으로 선언할 필요가 없습니다. 예를 들어 tabs API의 경우 기본 기능은 어떠한 권한도 필요로하지 않고 액세스할 수 있습니다. 어떤 확장 프로그램이 탭을 열거나 닫을 때 알림을 받을 수 있지만, 이들 탭이 어떤 웹 사이트와 관련되어 있는지는 알 수 없습니다.

너무 무해해 보이나요? tabs.create() API는 다소 그렇지 않습니다. 이를 사용하여 새 탭을 생성할 수 있으며, 이는 어떤 웹 사이트에서든 호출할 수 있는 window.open()과 본질적으로 동일합니다. 그러나 window.open()은 팝업 차단기의 영향을 받지만, tabs.create()는 그렇지 않습니다.

{% hint style="danger" %} 확장 프로그램은 원하는 대로 언제든지 탭을 생성할 수 있습니다. {% endhint %}

tabs.create() 매개변수를 살펴보면 window.open()이 통제할 수 있는 범위를 훨씬 초과하는 것을 알 수 있습니다. Firefox는 이 API에서 data: URI의 사용을 허용하지 않지만, Chrome은 이러한 보호 기능이 없습니다. 최상위 수준에서 이러한 URI를 사용하는 것은 사기 목적으로 남용되어 금지되었습니다.

tabs.update()tabs.create()와 매우 유사하지만 기존 탭을 수정합니다. 따라서 악의적인 확장 프로그램은 예를 들어 광고 페이지를 임의로 로드하여 탭을 활성화할 수 있습니다.

웹캠, 지리적 위치 및 기타

웹 사이트가 웹캠(비디오 회의 도구) 또는 지리적 위치(지도)에 액세스하기 위한 특별한 권한을 요청할 수 있다는 것을 알고 계실 것입니다. 이는 남용 가능성이 큰 기능이므로 사용자는 매번 이를 확인해야 합니다.

{% hint style="danger" %} 그러나 브라우저 확장 프로그램의 경우 웹캠이나 마이크에 액세스하려면 한 번만 권한을 요청하면됩니다. {% endhint %}

일반적으로 확장 프로그램은 설치된 직후에 이를 수행합니다. 이 프롬프트이 수락되면, 웹캠 액세스가 언제든지 가능하며, 사용자가 확장 프로그램과 상호 작용하지 않는 경우에도 가능합니다. 네, 사용자는 확장 프로그램이 웹캠 액세스가 실제로 필요한 경우에만 이 프롬프트를 수락할 것입니다. 그러나 그 이후에는 확장 프로그램이 비밀리에 무언가를 녹음하지 않도록 신뢰해야 합니다.

정확한 지리적 위치 또는 클립보드 내용에 액세스하기 위해 명시적으로 권한을 부여할 필요가 없습니다. 확장 프로그램은 단순히 매니페스트의 permissions 항목 geolocation 또는 clipboard를 추가하면 됩니다. 이러한 액세스 권한은 확장 프로그램이 설치될 때 암시적으로 부여됩니다. 따라서 이러한 권한을 가진 악의적이거나 침해당한 확장 프로그램은 사용자가 알아차리지 못하고 이동 프로필을 생성하거나 복사된 비밀번호를 모니터링할 수 있습니다.

history API에 액세스하기 위해 permissions 항목history 키워드를 추가하면 사용자의 전체 탐색 기록을 기다리지 않고 한꺼번에 검색할 수 있습니다.

bookmarks 권한은 비슷한 남용 가능성을 가지고 있으며, 이를 통해 bookmarks API를 통해 모든 책갈피를 읽을 수 있습니다.

저장소 권한

확장 프로그램 저장소는 일반적으로 localStorage와 매우 유사한 키-값 컬렉션입니다. 따라서 여기에는 민감한 정보를 저장해서는 안 됩니다.

그러나 광고 회사도 이 저장소를 남용할 수 있습니다.

추가 권한

여기에서 크로미움 브라우저 확장 프로그램이 요청할 수 있는 권한의 완전한 목록을 찾을 수 있습니다여기에서 파이어폭스 확장 프로그램을 위한 완전한 목록을 찾을 수 있습니다.

예방

Google의 개발자 정책은 확장 프로그램이 기능에 필요한 것보다 더 많은 권한을 요청하는 것을 명시적으로 금지하여 과도한 권한 요청을 완화합니다. 브라우저 확장 프로그램이 이 경계를 넘어선 사례는 브라우저 자체와 함께 배포된 경우였습니다.

브라우저는 확장 프로그램 권한 남용을 더 억제할 수 있습니다. 예를 들어, 화면 녹화에 사용되는 Chrome의 tabCapturedesktopCapture API는 남용을 최소화하기 위해 설계되었습니다. tabCapture API는 확장 프로그램 아이콘을 클릭하는 등 직접 사용자 상호작용을 통해서만 활성화될 수 있으며, desktopCapture는 창이 녹화되기 위해 사용자 확인을 요구하여 은밀한 녹화 활동을 방지합니다.

그러나 보안 조치를 강화하면 확장 프로그램의 유연성과 사용자 친화성이 감소할 수 있습니다. activeTab 권한은 이러한 트레이드오프를 보여줍니다. 이는 확장 프로그램이 전체 인터넷에 대한 호스트 권한을 요청할 필요 없이 사용자가 명시적으로 활성화할 때 현재 탭에만 액세스할 수 있도록 하는 것을 목적으로 도입되었습니다. 이 모델은 사용자 주도적 조치를 필요로 하는 확장 프로그램에 효과적이지만, 자동 또는 선제적 조치가 필요한 확장 프로그램에는 적합하지 않아 편리성과 즉각적인 응답성이 저하될 수 있습니다.

참고 자료

제로부터 영웅이 될 때까지 AWS 해킹 배우기 htARTE (HackTricks AWS Red Team Expert)!

HackTricks를 지원하는 다른 방법: