ఫ్రంట్ ఎండ్ HTTP/2 ద్వారా కనెక్షన్లను అంగీకరిస్తుంది మరియు వాటిని HTTP/1.1 ద్వారా బ్యాకెండ్కు ప్రసారం చేసే వెబ్ సిస్టమ్లు "HTTP అభ్యర్థన స్మగ్లింగ్" దాడి యొక్క కొత్త వైవిధ్యానికి గురయ్యాయి, ఇది ప్రత్యేకంగా రూపొందించిన క్లయింట్ అభ్యర్థనలను పంపడం ద్వారా అనుమతిస్తుంది. ఫ్రంటెండ్ మరియు బ్యాకెండ్ మధ్య ఒకే ప్రవాహంలో ప్రాసెస్ చేయబడిన ఇతర వినియోగదారుల నుండి అభ్యర్థనల కంటెంట్లను వెజ్ చేయండి. చట్టబద్ధమైన వెబ్సైట్తో సెషన్లో హానికరమైన జావాస్క్రిప్ట్ కోడ్ను ఇన్సర్ట్ చేయడానికి, యాక్సెస్ పరిమితి సిస్టమ్లను దాటవేయడానికి మరియు ప్రామాణీకరణ పారామితులను అడ్డగించడానికి దాడిని ఉపయోగించవచ్చు.
సమస్య వెబ్ ప్రాక్సీలు, లోడ్ బ్యాలెన్సర్లు, వెబ్ యాక్సిలరేటర్లు, కంటెంట్ డెలివరీ సిస్టమ్లు మరియు అభ్యర్థనలు ఫ్రంట్-ఎండ్-టు-బ్యాకెండ్ పద్ధతిలో మళ్లించబడే ఇతర కాన్ఫిగరేషన్లను ప్రభావితం చేస్తుంది. అధ్యయనం యొక్క రచయిత Netflix, Verizon, Bitbucket, Netlify CDN మరియు Atlassian వ్యవస్థలపై దాడి చేసే అవకాశాన్ని ప్రదర్శించారు మరియు దుర్బలత్వాలను గుర్తించినందుకు రివార్డ్ ప్రోగ్రామ్లలో 56 వేల డాలర్లు అందుకున్నారు. F5 నెట్వర్క్ల ఉత్పత్తులలో కూడా సమస్య నిర్ధారించబడింది. సమస్య Apache http సర్వర్ (CVE-2021-33193)లో mod_proxyని పాక్షికంగా ప్రభావితం చేస్తుంది, వెర్షన్ 2.4.49లో పరిష్కారం ఆశించబడుతుంది (డెవలపర్లకు సమస్య గురించి మే ప్రారంభంలో తెలియజేయబడింది మరియు దాన్ని పరిష్కరించడానికి 3 నెలల సమయం ఇవ్వబడింది). nginxలో, "కంటెంట్-లెంగ్త్" మరియు "ట్రాన్స్ఫర్-ఎన్కోడింగ్" హెడర్లను ఏకకాలంలో పేర్కొనే సామర్థ్యం గత విడుదలలో (1.21.1) బ్లాక్ చేయబడింది. అటాక్ టూల్స్ ఇప్పటికే బర్ప్ టూల్కిట్లో చేర్చబడ్డాయి మరియు టర్బో ఇంట్రూడర్ ఎక్స్టెన్షన్ రూపంలో అందుబాటులో ఉన్నాయి.
ట్రాఫిక్లోకి రిక్వెస్ట్లను వెడ్జింగ్ చేసే కొత్త పద్ధతి యొక్క ఆపరేషన్ సూత్రం రెండు సంవత్సరాల క్రితం అదే పరిశోధకుడు గుర్తించిన దుర్బలత్వాన్ని పోలి ఉంటుంది, కానీ HTTP/1.1 ద్వారా అభ్యర్థనలను అంగీకరించే ఫ్రంటెండ్లకు పరిమితం చేయబడింది. ఫ్రంటెండ్-బ్యాకెండ్ స్కీమ్లో, క్లయింట్ అభ్యర్థనలు అదనపు నోడ్ ద్వారా స్వీకరించబడతాయని గుర్తుచేసుకుందాం - ఫ్రంటెండ్, ఇది బ్యాకెండ్తో దీర్ఘకాలిక TCP కనెక్షన్ను ఏర్పాటు చేస్తుంది, ఇది అభ్యర్థనలను నేరుగా ప్రాసెస్ చేస్తుంది. ఈ సాధారణ కనెక్షన్ ద్వారా, వివిధ వినియోగదారుల నుండి అభ్యర్థనలు సాధారణంగా ప్రసారం చేయబడతాయి, ఇవి HTTP ప్రోటోకాల్ ద్వారా వేరు చేయబడిన గొలుసును ఒకదాని తర్వాత ఒకటి అనుసరిస్తాయి.
క్లాసిక్ “HTTP అభ్యర్థన స్మగ్లింగ్” దాడి అనేది HTTP హెడర్లు “కంటెంట్-లెంగ్త్” (అభ్యర్థనలోని డేటా మొత్తం పరిమాణాన్ని నిర్ణయిస్తుంది) మరియు “ట్రాన్స్ఫర్-ఎన్కోడింగ్: చంక్డ్” (అనుమతిస్తుంది) వినియోగాన్ని ఫ్రంటెండ్లు మరియు బ్యాకెండ్లు అర్థం చేసుకోవడంపై ఆధారపడి ఉన్నాయి. డేటాను భాగాలుగా బదిలీ చేయాలి) భిన్నంగా. . ఉదాహరణకు, ఫ్రంటెండ్ "కంటెంట్-లెంగ్త్"కి మాత్రమే మద్దతిచ్చి "బదిలీ-ఎన్కోడింగ్: చంక్డ్"ని విస్మరిస్తే, దాడి చేసే వ్యక్తి "కంటెంట్-లెంగ్త్" మరియు "ట్రాన్స్ఫర్-ఎన్కోడింగ్: చంక్డ్" హెడర్లను కలిగి ఉన్న అభ్యర్థనను పంపవచ్చు, కానీ పరిమాణం "కంటెంట్-పొడవు" అనేది చంక్డ్ చైన్ పరిమాణంతో సరిపోలడం లేదు. ఈ సందర్భంలో, ఫ్రంటెండ్ “కంటెంట్-లెంగ్త్”కి అనుగుణంగా అభ్యర్థనను ప్రాసెస్ చేస్తుంది మరియు దారి మళ్లిస్తుంది మరియు బ్యాకెండ్ “బదిలీ-ఎన్కోడింగ్: చంక్డ్” ఆధారంగా బ్లాక్ పూర్తయ్యే వరకు వేచి ఉంటుంది మరియు దాడి చేసేవారి అభ్యర్థనలో మిగిలిన టైల్ ఉంటుంది. తదుపరి ప్రసారం చేయబడిన వేరొకరి అభ్యర్థన ప్రారంభంలో ఉండండి.
పంక్తి స్థాయిలో అన్వయించబడిన టెక్స్ట్ ప్రోటోకాల్ HTTP/1.1 వలె కాకుండా, HTTP/2 అనేది బైనరీ ప్రోటోకాల్ మరియు ముందుగా పేర్కొన్న పరిమాణంలోని డేటా బ్లాక్లను మానిప్యులేట్ చేస్తుంది. అయినప్పటికీ, HTTP/2 సాధారణ HTTP హెడర్లకు అనుగుణంగా ఉండే సూడో-హెడర్లను ఉపయోగిస్తుంది. HTTP/1.1 ప్రోటోకాల్ ద్వారా బ్యాకెండ్తో పరస్పర చర్య విషయంలో, ఫ్రంటెండ్ ఈ సూడో-హెడర్లను ఒకే విధమైన HTTP హెడర్లుగా HTTP/1.1గా అనువదిస్తుంది. సమస్య ఏమిటంటే, అసలు అభ్యర్థన యొక్క పారామితుల గురించి సమాచారం లేకుండా, ఫ్రంటెండ్ సెట్ చేసిన HTTP హెడర్ల ఆధారంగా స్ట్రీమ్ను అన్వయించడం గురించి బ్యాకెండ్ నిర్ణయాలు తీసుకుంటుంది.
ప్రత్యేకించి, "కంటెంట్-పొడవు" మరియు "బదిలీ-ఎన్కోడింగ్" విలువలు HTTP/2లో ఉపయోగించబడనప్పటికీ, మొత్తం డేటా పరిమాణం నిర్ణయించబడినందున, వాటిని నకిలీ-హెడర్ల రూపంలో ప్రసారం చేయవచ్చు. ఒక ప్రత్యేక రంగంలో. అయినప్పటికీ, HTTP/2 అభ్యర్థనను HTTP/1.1కి మార్చే ప్రక్రియలో, ఈ హెడర్లు నిర్వహించబడతాయి మరియు బ్యాకెండ్ను గందరగోళానికి గురి చేయవచ్చు. రెండు ప్రధాన దాడి వేరియంట్లు ఉన్నాయి: H2.TE మరియు H2.CL, దీనిలో బ్యాకెండ్ తప్పు బదిలీ-ఎన్కోడింగ్ లేదా కంటెంట్-నిడివి విలువతో తప్పుదారి పట్టించబడుతుంది, ఇది ఫ్రంటెండ్ ద్వారా స్వీకరించబడిన అభ్యర్థన బాడీ యొక్క వాస్తవ పరిమాణానికి అనుగుణంగా లేదు. HTTP/2 ప్రోటోకాల్.
H2.CL దాడికి ఉదాహరణ Netflixకి HTTP/2 అభ్యర్థనను పంపుతున్నప్పుడు కంటెంట్-నిడివి గల సూడో-హెడర్లో సరికాని పరిమాణాన్ని పేర్కొనడం. ఈ అభ్యర్థన HTTP/1.1 ద్వారా బ్యాకెండ్ను యాక్సెస్ చేస్తున్నప్పుడు సారూప్య HTTP హెడర్ కంటెంట్-లెంగ్త్ని జోడించడానికి దారి తీస్తుంది, అయితే కంటెంట్-లెంగ్త్లో పరిమాణం వాస్తవ పరిమాణం కంటే తక్కువగా పేర్కొనబడినందున, టెయిల్లోని డేటాలో కొంత భాగం ప్రాసెస్ చేయబడుతుంది తదుపరి అభ్యర్థన ప్రారంభం.
ఉదాహరణకు, HTTP/2 :మెథడ్ POST :path /n
బ్యాకెండ్కి అభ్యర్థన పంపబడుతుంది: POST /n HTTP/1.1 హోస్ట్: www.netflix.com కంటెంట్-పొడవు: 4 abcdGET /n HTTP/1.1 హోస్ట్: 02.rs?x.netflix.com ఫూ: బార్
కంటెంట్-నిడివి 4 విలువను కలిగి ఉన్నందున, బ్యాకెండ్ అభ్యర్థన యొక్క ప్రధాన అంశంగా “abcd”ని మాత్రమే అంగీకరిస్తుంది మరియు మిగిలిన “GET /n HTTP/1.1...” తదుపరి అభ్యర్థన యొక్క ప్రారంభం వలె ప్రాసెస్ చేయబడుతుంది. మరొక వినియోగదారుతో అనుబంధించబడింది. దీని ప్రకారం, స్ట్రీమ్ డీసింక్రొనైజ్ చేయబడుతుంది మరియు తదుపరి అభ్యర్థనకు ప్రతిస్పందనగా, డమ్మీ అభ్యర్థనను ప్రాసెస్ చేసిన ఫలితం జారీ చేయబడుతుంది. Netflix విషయంలో, డమ్మీ అభ్యర్థనలో "హోస్ట్:" హెడర్లో థర్డ్-పార్టీ హోస్ట్ని పేర్కొనడం వలన క్లయింట్ "లొకేషన్: https://02.rs?x.netflix.com/n" మరియు నెట్ఫ్లిక్స్ సైట్ సందర్భంలో మీ జావాస్క్రిప్ట్ కోడ్ని అమలు చేయడంతో సహా క్లయింట్కు ఏకపక్ష కంటెంట్ని పంపడానికి అనుమతించింది.
రెండవ దాడి ఎంపిక (H2.TE) "బదిలీ-ఎన్కోడింగ్: చంక్డ్" హెడర్ను ప్రత్యామ్నాయంగా కలిగి ఉంటుంది. HTTP/2లో బదిలీ-ఎన్కోడింగ్ సూడో-హెడర్ని ఉపయోగించడం స్పెసిఫికేషన్ ద్వారా నిషేధించబడింది మరియు దానితో చేసిన అభ్యర్థనలు తప్పుగా పరిగణించబడాలని సూచించబడ్డాయి. అయినప్పటికీ, కొన్ని ఫ్రంటెండ్ ఇంప్లిమెంటేషన్లు ఈ అవసరాన్ని పరిగణనలోకి తీసుకోవు మరియు HTTP/2లో బదిలీ-ఎన్కోడింగ్ సూడో-హెడర్ను ఉపయోగించడాన్ని అనుమతిస్తాయి, ఇది ఇదే HTTP హెడర్గా మార్చబడుతుంది. “బదిలీ-ఎన్కోడింగ్” హెడర్ ఉన్నట్లయితే, బ్యాకెండ్ దానిని అధిక ప్రాధాన్యతగా తీసుకుని, “{size}\r\n{బ్లాక్ ఫార్మాట్లో వివిధ పరిమాణాల బ్లాక్లను ఉపయోగించి “చంక్డ్” మోడ్లో డేటాను ఒక్కొక్కటిగా అన్వయించవచ్చు. }\r\n{size} \r\n{block}\r\n0", మొత్తం పరిమాణం ద్వారా ప్రారంభ విభజన ఉన్నప్పటికీ.
అటువంటి గ్యాప్ ఉనికిని వెరిజోన్ ఉదాహరణ ద్వారా ప్రదర్శించారు. సమస్య ప్రామాణీకరణ పోర్టల్ మరియు కంటెంట్ మేనేజ్మెంట్ సిస్టమ్కు సంబంధించినది, ఇది హఫింగ్టన్ పోస్ట్ మరియు ఎంగాడ్జెట్ వంటి సైట్లలో కూడా ఉపయోగించబడుతుంది. ఉదాహరణకు, HTTP/2: :మెథడ్ POST :path /identitfy/XUI x=
బ్యాకెండ్కి HTTP/1.1 అభ్యర్థనను పంపడం ఫలితంగా: POST /IDity/XUI HTTP/1.1 హోస్ట్: id.b2b.oath.com కంటెంట్-పొడవు: 66 బదిలీ-ఎన్కోడింగ్: 0 GET /అయ్యోప్స్ HTTP/1.1 హోస్ట్: psres. నికర కంటెంట్- పొడవు: 10x=
బ్యాకెండ్, "కంటెంట్-లెంగ్త్" హెడర్ను విస్మరించింది మరియు "ట్రాన్స్ఫర్-ఎన్కోడింగ్: చంక్డ్" ఆధారంగా స్ట్రీమ్లో విభజనను ప్రదర్శించింది. ఆచరణలో, దాడి OAuth ప్రామాణీకరణకు సంబంధించిన అభ్యర్థనలను అడ్డగించడంతో సహా వినియోగదారు అభ్యర్థనలను వారి వెబ్సైట్కు దారి మళ్లించడాన్ని సాధ్యం చేసింది, వీటి యొక్క పారామితులు రెఫరర్ హెడర్లో ప్రదర్శించబడతాయి, అలాగే ప్రామాణీకరణ సెషన్ను అనుకరించడం మరియు ఆధారాలను పంపడానికి వినియోగదారు సిస్టమ్ను ప్రేరేపించడం. దాడి చేసేవారి హోస్ట్కి. HTTP/2ని పొందండి
బదిలీ-ఎన్కోడింగ్ సూడో-హెడర్ను పేర్కొనడానికి అనుమతించని HTTP/2 ఇంప్లిమెంటేషన్లపై దాడి చేయడానికి, కొత్త లైన్ అక్షరంతో వేరు చేయబడిన ఇతర సూడో-హెడర్లకు జోడించడం ద్వారా “బదిలీ-ఎన్కోడింగ్” హెడర్ను ప్రత్యామ్నాయంగా చేర్చే మరొక పద్ధతి ప్రతిపాదించబడింది ( ఈ సందర్భంలో HTTP/1.1కి మార్చబడినప్పుడు రెండు వేర్వేరు HTTP హెడర్లను సృష్టిస్తుంది).
ఉదాహరణకు, Atlassian Jira మరియు Netlify CDN (ఫైర్ఫాక్స్లో మొజిల్లా ప్రారంభ పేజీని అందించడానికి ఉపయోగించబడుతుంది) ఈ సమస్య ద్వారా ప్రభావితమయ్యాయి. ప్రత్యేకంగా, HTTP/2 అభ్యర్థన :పద్ధతి POST :path / :authority start.mozilla.org foo b\r\n transfer-encoding: chunked 0\r\n \r\n GET / HTTP/1.1\r\n హోస్ట్ : evil-netlify-domain\r\n కంటెంట్-నిడివి: 5\r\n \r\nx=
ఫలితంగా HTTP/1.1 POST / HTTP/1.1 అభ్యర్థన బ్యాకెండ్కి పంపబడింది\r\n హోస్ట్: start.mozilla.org\r\n Foo: b\r\n బదిలీ-ఎన్కోడింగ్: ఛంక్డ్\r\n కంటెంట్-పొడవు : 71\ r\n \r\n 0\r\n \r\n GET / HTTP/1.1\r\n హోస్ట్: evil-netlify-domain\r\n కంటెంట్-పొడవు: 5\r\n \r \nx=
"బదిలీ-ఎన్కోడింగ్" హెడర్ను ప్రత్యామ్నాయం చేయడానికి మరొక ఎంపిక ఏమిటంటే, దానిని మరొక నకిలీ-హెడర్ పేరుకు లేదా అభ్యర్థన పద్ధతితో లైన్కు జోడించడం. ఉదాహరణకు, అట్లాసియన్ జిరాను యాక్సెస్ చేస్తున్నప్పుడు, "చంక్డ్" విలువతో "ఫూ: బార్\r\nట్రాన్స్ఫర్-ఎన్కోడింగ్" అనే సూడో-హెడర్ పేరు HTTP హెడర్లు "foo: bar" మరియు "transfer-encoding: chunked" జోడించబడటానికి కారణమైంది. , మరియు సూడో-హెడర్ ":మెథడ్" విలువను పేర్కొనడం "GET / HTTP/1.1\r\nబదిలీ-ఎన్కోడింగ్: చంక్డ్" "GET / HTTP/1.1\r\nట్రాన్స్ఫర్-ఎన్కోడింగ్: చంక్డ్"గా అనువదించబడింది.
సమస్యను గుర్తించిన పరిశోధకుడు ఫ్రంటెండ్లపై దాడి చేయడానికి అభ్యర్థన టన్నెలింగ్ టెక్నిక్ను కూడా ప్రతిపాదించారు, దీనిలో ప్రతి IP చిరునామా బ్యాకెండ్కు ప్రత్యేక కనెక్షన్ను ఏర్పాటు చేస్తుంది మరియు విభిన్న వినియోగదారుల నుండి ట్రాఫిక్ మిశ్రమంగా ఉండదు. ప్రతిపాదిత సాంకేతికత ఇతర వినియోగదారుల నుండి వచ్చిన అభ్యర్థనలతో జోక్యం చేసుకోవడానికి అనుమతించదు, కానీ ఇతర అభ్యర్థనల ప్రాసెసింగ్ను ప్రభావితం చేసే భాగస్వామ్య కాష్ను విషపూరితం చేయడం సాధ్యం చేస్తుంది మరియు ఫ్రంటెండ్ నుండి బ్యాకెండ్కు సేవా సమాచారాన్ని బదిలీ చేయడానికి ఉపయోగించే అంతర్గత HTTP హెడర్ల ప్రత్యామ్నాయాన్ని అనుమతిస్తుంది ( ఉదాహరణకు, అటువంటి హెడర్లలో ఫ్రంటెండ్ వైపు ప్రమాణీకరించేటప్పుడు ప్రస్తుత వినియోగదారు గురించి సమాచారాన్ని బ్యాకెండ్కు ప్రసారం చేయవచ్చు). ఆచరణలో పద్ధతిని వర్తింపజేయడానికి ఉదాహరణగా, కాష్ పాయిజనింగ్ ఉపయోగించి, బిట్బకెట్ సేవలోని పేజీలపై నియంత్రణ సాధించడం సాధ్యమైంది.
మూలం: opennet.ru