์ํด ์ฒซ๊ธ์ ๋๋ค. ์ฌ์ค 12์ ๋ง์ง๋ง ๊ธ๋ก ์์ฑํ๋ ค๊ณ ํ๋๋ฐ, ๋ง๋ฌด๋ฆฌ๋ฅผ ๋ชปํด์ ์ํด ์ฒซ๊ธ์ด ๋์ด๋ฒ๋ ธ๋ค์. ์ต๊ทผ์ ๋ธ๋ผ์ฐ์ ํ์ฅ ๊ด๋ จํด์ ๊ธฐ์กด์ ์๋ ๊ฒ ๋ณด๋ค ์กฐ๊ธ ๋ ๋ฆฌ์์นํ ์ผ์ด ์์๋๋ฐ, ๊ฒธ์ฌ๊ฒธ์ฌ ์ ๋ฆฌํ ๊ฒธ ๋ถ์ ๋ฐฉ๋ฒ์ ๋ํด ๊ธ๋ก ์ ๋ฆฌํด๋ด ๋๋ค.
Background knowledge
Background page
background page๋ ๋ธ๋ผ์ฐ์ ํ์ฅ ๊ธฐ๋ฅ์์ ์ฌ์ฉํ๋ DOM ๋ด๋ถ์ ์คํฌ๋ฆฝํธ ์์ญ์ ๋๋ค. ์ฐ์ ๋ธ๋ผ์ฐ์ ํ์ฅ ๊ธฐ๋ฅ์ ์น ํ์ด์ง์ ๋ณ๊ฐ์ ๊ฒฉ๋ฆฌ๋ DOM์์ ๋์ํ๊ณ , ์ฃผ์ ๋ก์ง์ DOM ๋ด๋ถ์ background page์์ ๊ฐ๋ฐ์๊ฐ ์์ฑํ javascript code๋ฅผ ๊ธฐ์ค์ผ๋ก ๋์ํ๊ฒ ๋ฉ๋๋ค.
ํด๋น ์์ญ์์๋ ํ๊ฐ๋ ๊ถํ ์ ์์ Browser Extension API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Policy
๋ธ๋ผ์ฐ์ ํ์ฅ ๊ธฐ๋ฅ์ ์น ํ์ด์ง์ ์ ์ฌํ ๋ณด์ ์ ์ฑ ์ ๊ฐ์ง๊ณ ๊ฐ๋๋ค. (SOP, Frame ๋ฑ๋ฑ) ๋ค๋ง ํ๊ฒฝ ์์ฒด์ ํน์ฑ ํ์ ์ ์ฉ๋ฐ์ง ๋ชปํ๋ ๊ฒ๋ค๋ ์๊ธด ํฉ๋๋ค. ์๋ฌดํผ CORS, Frame ํ์ฉ ์ฌ๋ถ ๋ฑ์ ํ์ฅ ๊ธฐ๋ฅ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ Manifest.json์์ ๊ด๋ฆฌํฉ๋๋ค.
Format of extension
ZIP ํ์ผ์ ๋๋ค.
Manifest.json
์์์ ์ด์ผ๊ธฐ๋๋ ธ๋ฏ์ด Manifest.json์ ๋ธ๋ผ์ฐ์ ์ ์ ๋ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์๋ ํ์ผ์ ๋๋ค. (๋ง์น ์๋๋ก์ด๋์ manifest.xml๊ณผ ์ ์ฌํ์ฃ )
ํ์ฅ ๊ธฐ๋ฅ์ ZIP ํฌ๋งท์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋๋ฐ, ์์ถ์ ํ๊ฒ๋๋ฉด ์ต์๋จ ๋๋ ํ ๋ฆฌ์ manifest.json
ํ์ผ์ด ์กด์ฌํฉ๋๋ค. ํ์ฅ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋, ๋ถ์ํ๋ ๋ชจ๋ ํ์๋ ์ด ํ์ผ์์ ์์๋ฉ๋๋ค.
Testing
์ค๋ ๊ธ์ ๋ชฉ์ ์ด ํ ์คํ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์, ์ด๋ค ์์๋ก ๋ถ์ํ๋ฉด ์ข์์ง ํ๋ํ๋์ฉ ํ์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Download browser extension file and Extract
์ฐ์ ๋ถ์์ ์ํด์ ํ์ฅ ๊ธฐ๋ฅ ํ์ผ(ZIP)์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ถ์ํ ํ์ฅ ๊ธฐ๋ฅ์ ํ์ผ์ ๋ฐ๊ฑฐ๋ ์ค์นํฉ๋๋ค. store์ ์๋ ํ์ฅ์ ๊ฒฝ์ฐ ๋ฐ๋ก ํ์ผ์ ๋ฐ์ ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์ ์ค์นํ ํ ์ง์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ฌ ์ฐพ์ต๋๋ค.
// Chrome ๊ธฐ์ค
MacOS: ~/Library/Application\ Support/Google/Chrome/Default/Extensions
Linux: ~/.config/google-chrome/Default/Extensions/
Windows: C:\Users\<Your_User_Name>\AppData\Local\Google\Chrome\User Data\Default\Extensions
๊ฐ ๋ธ๋ผ์ฐ์ ๋ณ ์์น๋ ๊ตฌ๊ธ๋งํด๋ณด๋ฉด ์ ๋์ต๋๋ค. ์ฌ๊ธฐ์ ํ์ฅ ๊ธฐ๋ฅ์ ์ด๋ฆ์ Extension ์์ฒด์ ID ๊ฐ์ ๋๋ค.
ll ~/Library/Application\ Support/Google/Chrome/Default/Extensions
total 0
drwx------@ 2 hahwul staff 64B 12 24 00:37 Temp
drwx------@ 3 hahwul staff 96B 9 29 2019 aapocclcgogkmnckokdopfmhonfmgoek
drwx------@ 3 hahwul staff 96B 9 29 2019 aohghmighlieiainnegkcijnfilokake
drwx------@ 3 hahwul staff 96B 11 14 18:39 apdfllckaahabafndbhieahigkjlhalf
drwx------@ 3 hahwul staff 96B 7 12 00:48 baacjfeencnlcclennchejfnbcplfmbb
drwx------@ 3 hahwul staff 96B 9 29 2019 blpcfgokakmgnkcojhhkbfbldkacnbeo
drwx------@ 3 hahwul staff 96B 11 29 16:57 eimadpbcbfnmbkopoojfekhnkhdbieeh
drwx------@ 3 hahwul staff 96B 9 29 2019 felcaaldnbdncclmgdcncolpebgiejap
drwx------@ 3 hahwul staff 96B 11 29 16:57 fngmhnnpilhplaeedifhccceomclgfbg
drwx------@ 3 hahwul staff 96B 11 24 02:03 ghbmnnjooekpmoecnnnilnnbdlolhkhi
drwx------@ 3 hahwul staff 96B 11 2 2019 nmmhkkegccagdldgiimedpiccmgmieda
drwx------@ 4 hahwul staff 128B 12 24 00:37 ophjlpahpchlmihnnnihgmmeilfjmjjc
drwx------@ 3 hahwul staff 96B 7 9 00:53 phbjaiacjbplfmapmlljdoacomhbpfoe
drwx------@ 3 hahwul staff 96B 11 14 18:39 pjkljhegncpnkpknbcohdijeoejaedia
drwx------@ 3 hahwul staff 96B 11 24 02:03 pkedcjkdefgpdelpbcmbmeomcjbeemfm
ํ์ฅ ํ๋ก๊ทธ๋จ ํ์ด์ง์์ ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ๋ผ ๋ถ์ํ ๋๋ ํ ๋ฆฌ๋ก ๊ฐ์ ธ์ต์๋ค.
cp -r ~/Library/Application\ Support/Google/Chrome/Default/Extensions/phbjaiacjbplfmapmlljdoacomhbpfoe .
Struct of browser extension
ํ์ฅ ๊ธฐ๋ฅ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ง๋ง, ๊ณตํต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ค์ ํ์ผ์ธ manifest.json
, view ๊ด๋ จ ๋ถ๋ถ์ด ์๋ค๋ฉด popup.html
๊ณผ popup.js
, ๊ทธ๋ฆฌ๊ณ ์ค์ background ์์
์ ์ฒ๋ฆฌํ๋ js ํ์ผ๋ค์
๋๋ค.
ll
total 168
...
-rw-------@ 1 hahwul staff 1.7K 1 2 01:32 manifest.json
-rw-------@ 1 hahwul staff 262B 1 2 01:32 popup.html
-rw-------@ 1 hahwul staff 2.1K 1 2 01:32 popup.js
-rw-------@ 1 hahwul staff 954B 1 2 01:32 setting.html
-rw-------@ 1 hahwul staff 9.8K 1 2 01:32 setting.js
-rw-------@ 1 hahwul staff 9.7K 1 2 01:32 util.js
Analysis manifest.json
๊ฐ์ฅ ๋จผ์ ์ดํด๋ด์ผํ ๊ป manifest.json์
๋๋ค. ์ฌ๊ธฐ์ ํ์ฅ ๊ธฐ๋ฅ์ ์ ๋ฐ์ ์ธ ์ค์ ์ ๋ณด์ ๋๋ถ์ด ์ ์ฑ
์ ์ธ ๋ถ๋ถ๋ ํ์ธํ ์ ์์ด์ ๋จผ์ ์ฒดํฌํ๊ณ ๊ฐ์ผํฉ๋๋ค. background page์์ ๊ตฌ๋์ ์ฌ์ฉ๋๋ Js๋ background
์ ๋ช
์๋์ด ์๊ณ , permissions
์ ํ์ฅ ๊ธฐ๋ฅ์ ์ ์ฑ
์ด ๋ช
์๋์ด ์์ต๋๋ค.
{
"author": "MM3Tools",
"background": {
"scripts": [ "util.js", "ProxySwitch.js" ]
},
"browser_action": {
"browser_style": true,
"default_icon": {
"16": "img/MM3_16off.png",
"32": "img/MM3_32off.png"
},
"default_popup": "popup.html"
},
"commands": {
"ProxySwitch-1": {
"description": "1",
"suggested_key": {
"default": "Ctrl+Shift+1"
}
},
"ProxySwitch-2": {
"description": "2",
"suggested_key": {
"default": "Ctrl+Shift+2"
}
},
"ProxySwitch-3": {
"description": "3",
"suggested_key": {
"default": "Ctrl+Shift+3"
}
},
"ProxySwitch-4": {
"description": "4",
"suggested_key": {
"default": "Ctrl+Shift+4"
}
}
},
"default_locale": "en",
"description": "__MSG_appDescription__",
"icons": {
"48": "img/MM3_48.png",
"96": "img/MM3_96.png"
},
"key": "...snip...",
"manifest_version": 2,
"name": "MM3-ProxySwitch",
"options_ui": {
"open_in_tab": true,
"page": "setting.html"
},
"permissions": [ "storage", "proxy", "browsingData", "http://*/*", "https://*/*" ],
"short_name": "ProxySwitch",
"update_url": "https://clients2.google.com/service/update2/crx",
"version": "2018.332"
}
์ ํ์ฅ ๋๊ตฌ๋ฅผ ์์๋ก ๋ณด๋ฉด LocalStorage, Proxy ์ ์ด, Web Browsing ๋ฐ์ดํฐ ์ ๊ทผ์ ๋ํ Browser Extension API ๊ถํ์ด ์๊ณ , Host permission์ ๋ชจ๋ ๋๋ฉ์ธ์ ๋ํด ๊ฐ์ง๊ณ ์์ด ์ด๋ค ํ์ด์ง์์๋ ์ด ํ์ฅ ๊ธฐ๋ฅ์ background page์ ์ฝ๋๊ฐ ๋์ํ๊ฒ ๋ฉ๋๋ค.
ํผ๋ฏธ์ ์ ๋ํ ๋ถ๋ถ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions
Testing with devtools
๋ธ๋ผ์ฐ์ ํ์ฅ ๊ธฐ๋ฅ์ ๋ณ๋์ DOM ์์ญ์์ ๋์ํฉ๋๋ค. ๋ณดํต ์ผ๋ฐ์ ์ธ ์น์ด๋ผ๋ฉด DevTools์์ ์ง์ DOM๊ณผ JS๋ฅผ ๋๋ฒ๊น ํ๊ณ , ํ ์คํธํ ์ ์์ง๋ง ํ์ฅ ๊ธฐ๋ฅ์ ์ฝ๊ฐ ๋ค๋ฆ ๋๋ค.
์๋์ ๊ฐ์ด ์ต์
> ํ์ฅ ๊ธฐ๋ฅ
> ๋์ ํ์ฅ ๊ธฐ๋ฅ
> ๋ทฐ ๊ฒ์ฌ
์์ ์ง์ ๋ถ์ํ ํ์ด์ง๋ฅผ ์ง์ ํ์ฌ DevTools๋ฅผ ์ด ์ ์์ต๋๋ค.
DevTools๋ก๋ background page์ ์ฌ๋ผ์จ js๋ค๊ณผ view html๋ค์ ๋ํด์ ๋ถ์ํ ์ ์์ต๋๋ค. ์๋ฅผ๋ค์ด ๋ณด๋ฉด ์ ํ์ฅ์ ์๋ util.js์ ํน์ ํจ์๋ฅผ ๋ณด๊ณ ํ ์คํธํ๊ณ ์ถ์ ๋ DevTools์ ์ฌ๋ผ์จ DOM์๋ ์ด๋ฏธ ๋ก๋๋์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ํ ์คํธํ ์ ์์ด์ง๋๋ค.
cat util.js
"use strict";function err(ex){if(ex!=null)console.error(ex,ex.message,chrome.runtime.lastError);else console.error(chrome.runtime.lastError);}function myParseInt(value){try{value=value.trim();if(/^(\-|\+)?([0-9]+|Infinity)$/.test(value))return Number(value);}catch(ex){err(ex);}return NaN;}function hostM(host,isProxy){try{let hp={};let i=host.lastIndexOf(':');if(i!=-1){hp.port=host.substring(i+1);let em=null;if(hp.port.length==0)em=chrome.i18n.getMessage('notSpecified');else{let n=myParseInt(hp.port);if(isNaN(n))
์ด๋ฌ๋ฉด ๋ถ์์ด ํ์ธต ๋ ์ฌ์์ง๋๋ค ๐
๋ง์ฝ popup.html ์ด์ธ view ํ์ด์ง๊ฐ ๋ณ๋๋ก ์๋ค๋ฉด ์ง์ ์ ๊ทผํด์ ๋ถ์ํ์ ๋ ๋ฉ๋๋ค. (๊ฐ๋ฅํ๋ฉด ์ด๊ฒ ์ ์ผ ํธํ๊ฒ ์ฃ )
Testing user intput / output (for all the things)
ํ์ฅ ๊ธฐ๋ฅ์ ๋ธ๋ผ์ฐ์ ์์ ๋์ํ๋ ์น ํ์ด์ง์ด๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ธ ์น ํ์ด์ง์ ๋์ผํ ์ ๊ฒ ํฌ์ธํธ๋ฅผ ๊ฐ์ง๋๋ค. ๋ค๋ง ์ธ์๊ฐ์ด๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ผ๋ฏธํฐ ๋ฑ์ ํตํด ์ ๋ฌํ๋๊ฒ ์๋, PostMessage๋ Storage, DOM Read/Write๋ฅผ ํตํด์ ๊ณต์ /์ฌ์ฉํ๊ฒ ๋๋๋ฐ, ์ด ๋ถ๋ถ๋ค์ด ์ฃผ์ ์ ๊ฒ ํฌ์ธํธ๊ฐ ๋ฉ๋๋ค.
PostMessage์ ๊ฒฝ์ฐ ์์ ์ ์ด ๊ธ์ด ์์ผ๋ ์ฐธ๊ณ ํด์ฃผ์ธ์.
- https://www.hahwul.com/2020/05/14/vulnerability-of-postmessage/
- https://www.hahwul.com/2016/08/29/web-hacking-html5-postmessage-api/
์๋ฌดํผ ํ์ฅ๊ธฐ๋ฅ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๊ณ ์ฌ์ฉํ๋ ๋ถ๋ถ์ด ์ค์ ํฌ์ธํธ๊ณ , ์ผ๋ฐ ์น ์ ๊ฒ์ ๋นํด์ ์กฐ๊ธ ๋ ํน๋ณํ ๋ถ๋ถ์ด ์๋ค๋ฉด background page์ ๊ดํ ๋ถ๋ถ ๋๋ฌธ์ธ๋ฐ์, ํ์ฅ ๊ธฐ๋ฅ์ ์๊น ์์์ ๋ดค๋ฏ์ด manifest์ permission์ ๋ช ์ํ๊ณ , ์ฌ์ฉ์๋ก๋ถํฐ ๋์๋ฐ์ ํด๋น ๊ถํ์ ์ฌ์ฉํฉ๋๋ค. ์ด ๋ ํ์ฅ ๊ธฐ๋ฅ์ ๋ด๋ถ์ XSS ๋ฑ์ผ๋ก js ์ฝ๋๋ฅผ ์ฝ์ ํ ์ ์์ด์ง๋ ๊ฒฝ์ฐ์, ์ผ๋ฐ์ ์ธ XSS์ ๋ค๋ฅด๊ฒ Browser Extension API๋ฅผ ์ง์ ์ฌ์ฉํ ์ ์์ด, ๊ถํ์ ๋ฐ๋ผ ์ถ๊ฐ์ ์ธ ๋ฆฌ์คํฌ๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
Testing with iframe (for xs-leak, clickjacking)
manifest.json
์์ web_accessible_resources
๋ ๋ถ๋ถ์ด ์์ต๋๋ค. ์ด๋ ์ธ๋ถ์์ ํ์ฅ ๊ธฐ๋ฅ์ ์ง์ ์ ๊ทผ์ ์ด๋๊น์ง ํ์ฉํ ๊ฒ์ธ๊ฐ์ ๋ํ ์ ์ฑ
์ธ๋ฐ ๋ณดํต์ ํ๊ฐํ ๋ฆฌ์์ค๋ง ๋ช
์ํ์ง๋ง ๋์ ๋ฐ๋ผ์ ์๋์ ๊ฐ์ด *
๋ฑ์ผ๋ก ์ ์ดํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. (๋ฌผ๋ก ํ์ฉ ๋ฆฌ์์ค์ ์ค์ ํ์ด์ง๊ฐ ์์ผ๋ฉด ๊ทธ๊ฒ ๋ํ ๋ฌธ์ ๊ฐ ๋๊ฒ ์ฃ )
{
"web_accessible_resources" : "*"
}
์ด๋ฌํ ๊ฒฝ์ฐ ์ธ๋ถ์์ ์๋์ ๊ฐ์ด ID๊ฐ์ ํตํด iframe์ผ๋ก ํ์ด์ง ๋ด๋ถ์ frame์ผ๋ก ์ฝ์ ํ ์ ์์ด์ง๋๋ค.
<iframe src="chrome-extension://phbjaiacjbplfmapmlljdoacomhbpfoe/setting.html"></iframe>
์ด๋ฌํ ๊ฒฝ์ฐ, ClickJacking์ด๋ XS-Leak ๋ฑ์ ๋ ธ์ถ๋ ์ ์์ต๋๋ค.
A major weakness
์ฌ์ค ๋ญ ๋ค ์ค์ํ๊ฒ ์ง๋ง, ๋ช๊ฐ์ง ์ถ๋ ค๋ดค์ต๋๋ค.
XSS
๋๋ค์ ์น ์ทจ์ฝ์ ์ด ํฌ์ธํธ๊ฐ ๋๊ฒ ์ง๋ง, ๊ทธ์ค์์๋ XSS๋ ๊ฐ์ฅ ์ค์ ์ ์ผ๋ก ๋ด์ผํ ๋ถ๋ถ์ผ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ฌด๋๋ ํด๋ผ์ด์ธ๋ ๋จ์์ ๋๋ฉ์ธ ๊ธฐ๋ฐ์ ๋ฆฌ์คํฌ๊ฐ ์๋, ๊ด๋ฒ์ํ UXSS๋ Browser API๋ฅผ ํตํ ์ถ๊ฐ์ ์ธ ๊ณต๊ฒฉ๊น์ง ์ด์ด์ง ์ ์์ด์ ํ์ฅ ๊ธฐ๋ฅ์์ ์กฐ๊ธ ๋ ์ค์ํ ๋ถ๋ถ์ผ๋ก ๋ณด์ ๋๋ค. (๋ง์น Public Cloud ํ๊ฒฝ์์ SSRF๊ฐ ์ค์๋๋ฅผ ๋ง์ด ๊ฐ์ ธ๊ฐ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค ๐)
Bypass CSP
๋ธ๋ผ์ฐ์ ํ์ฅ ๊ธฐ๋ฅ์์ CSP๋ Manifest์ ๋ช ์ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๋ ค์ง CSP ์ฐํ ๋ฐฉ๋ฒ์ ํตํด์ CSP ์ ์ฑ ์ ์ฐํํ ์ ์๊ณ , XSS ์ทจ์ฝ์ ์ด ์กฐ๊ธ ๋ ๋ฆฌ์คํฌ๋ฅผ ๊ฐ์ง๋๋ฐ ์์ด์ ํฐ ๋์์ ์ค ์ ์์ต๋๋ค.
Click Jacking
web_accessible_resources
์ค์ ์ ๋ฐ๋ผ์ ๋์ฌ ํ๋ฅ ์ด ๋์ ๋ถ๋ถ์
๋๋ค. ํ์ด์ง์ ์ค์ํ ๊ธฐ๋ฅ์ด ์๋ค๋ฉด ๊ณต๊ฒฉ์ผ๋ก ์ฑ๊ณต์ํค๊ธฐ ์ ๋ฆฌํฉ๋๋ค. samy์ quick jack ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์กฐ๊ธ ๋ ์ฝ๊ฒ PoC ๊ตฌ์ฑ์ด ๊ฐ๋ฅํฉ๋๋ค.
Javascript CVE
๋น์ฐํ ์น ๊ธฐ๋ฐ์ ํ์ด์ง๋ผ์ Javascript ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ณต๊ฐ ์ทจ์ฝ์ ์ ์ํฅ์ ๋ฐ์ต๋๋ค. ์ ๋ฐ์ดํธ๋ฅผ ์ํด์ ํ์ฅ ๊ธฐ๋ฅ์ ํจํค์ง ์ ๋ฐ์ดํธ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์น ํ์ด์ง๋ณด๋จ ์ ๋ฐ์ดํธ๊ฐ ๋๋ฆฐํธ์ ๋๋ค. retire.js ๋ฑ์ผ๋ก ์ฝ๊ฒ ํ์ธํ ์ ์์ต๋๋ค.
API server security
ํ์ฅ ๊ธฐ๋ฅ์ ์ฐ๋๋๋ API ์๋ฒ๋ ์ฃผ์ ๋ถ์ ๋์์ด ๋ฉ๋๋ค. ๋น์ฐํ ์ฌ๊ธฐ์ ๋ณดํธ์ ์ธ ์ทจ์ฝ์ ์ ์ฐพ์ ์ ์๊ณ , ์ด์ด์ ํ์ฅ ๊ธฐ๋ฅ๊ณผ์ ์ฐ๋์ฑ๋ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ํ์ฉํ๋ฉด ํ์ฅ ๊ธฐ๋ฅ ์์ฒด์๋ ์ํฅ์ ์ค ์ ์๋ ์ทจ์ฝ์ ์ ๋ง๋ค์ด๋ผ ์ ์์ต๋๋ค.
์๋ฅผ๋ค๋ฉด.. API Server ๋ด ์์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ์ํค๋ ์ทจ์ฝ์ ์ด ์๊ณ , ์ด ๋ฐ์ดํฐ๊ฐ ํ์ฅ ๊ธฐ๋ฅ์์ XSS๋ก ๋์ํ๋ค๋ฉด, UXSS ๋๋ Browser Extension API๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ณต๊ฒฉ๊น์ง ์ด์ด์ง ์ ์์ด ๋ฆฌ์คํฌ๋ฅผ ๋์ผ ์ ์์ต๋๋ค.