För ungefĂ€r ett Ă„r sedan lanserade vi pĂ„ DataLine en tjĂ€nst för att söka och analysera sĂ„rbarheter i IT-applikationer. Grunden för tjĂ€nsten Ă€r den molnbaserade lösningen Qualys, vars funktioner vi . Under ett Ă„rs arbete med lösningen har vi genomfört 291 skanningar för olika webbplatser och samlat statistik över vanliga sĂ„rbarheter i webbapplikationer.Â
I artikeln nedan visar jag vilka specifika sĂ€kerhetsluckor som döljer sig bakom olika kritikalitetsnivĂ„er. LĂ„t oss titta pĂ„ vilka sĂ„rbarheter skannern lyckades upptĂ€cka sĂ€rskilt ofta, varför de kan uppstĂ„ och hur man kan skydda sig.Â

Qualys delar in alla sĂ„rbarheter i webbapplikationer i tre kritikalitetsnivĂ„er: lĂ„g, medel och hög. Om man ser pĂ„ fördelningen efter "svĂ„righetsgrad" ser det inte sĂ„ illa ut. Det finns fĂ„ sĂ„rbarheter med hög kritikalitet, de flesta Ă€r icke-kritiska:Â

Men icke-kritiska betyder inte ofarliga. De kan ocksĂ„ orsaka allvarlig skada.Â
Topp icke-kritiska sÄrbarheter
- SÄrbarheter kopplade till blandat innehÄll.
En sĂ€kerhetsstandard för webbplatser Ă€r att överföra data mellan klient och server via protokollet HTTPS, som möjliggör kryptering och skyddar informationen frĂ„n att bli avlyssnad.Â
Vissa webbplatser anvĂ€nder blandat innehĂ„ll: de överför en del data över det oskyddade protokollet HTTP. Vanligtvis överförs passivt innehĂ„ll â information som endast pĂ„verkar webbplatsens visning: bilder, CSS-stilar. Men ibland överförs Ă€ven aktivt innehĂ„ll: skript som styr webbplatsens beteende. I det hĂ€r fallet kan man med hjĂ€lp av speciell programvara analysera information som kommer frĂ„n servern med aktivt innehĂ„ll, modifiera sina svar i realtid och fĂ„ systemet att fungera pĂ„ ett sĂ€tt som inte var avsett av dess skapare.Â
WebblĂ€sare i nya versioner varnar anvĂ€ndare för att webbplatser med blandat innehĂ„ll Ă€r osĂ€kra och blockerar innehĂ„ll. Webbplatsutvecklare fĂ„r ocksĂ„ varningar frĂ„n webblĂ€saren i konsolen. SĂ„ hĂ€r ser det ut i :Â

Vad Ă€r faran: Brottslingar utnyttjar det oskyddade protokollet för att avlyssna anvĂ€ndarinformation, byta ut skript och skicka förfrĂ„gningar till webbplatsen i dess namn. Ăven om besökaren pĂ„ webbplatsen inte har angett nĂ„gra uppgifter skyddar det inte mot fiske â att samla in konfidentiell information genom bedrĂ€gliga metoder. Till exempel, med hjĂ€lp av ett skript kan man omdirigera anvĂ€ndaren till en osĂ€ker webbplats som maskerar sig som en bekant. I vissa fall kan den skadliga webbplatsen se till och med bĂ€ttre ut Ă€n originalet, och anvĂ€ndaren kan sjĂ€lv fylla i formulĂ€ret och överlĂ€mna kĂ€nsliga uppgifter.ÂVad webbprogrammerare bör komma ihĂ„g: Ăven om webbplatsens administratör har installerat och konfigurerat SSL/TLS-certifikatet kan sĂ„rbarheter uppstĂ„ pĂ„ grund av mĂ€nskliga faktorer. Om en av sidorna har angett en absolut lĂ€nk med http istĂ€llet för en relativ, och om vidare ingen omdirigering frĂ„n http till https har konfigurerats.Â
För att upptÀcka blandat innehÄll pÄ webbplatsen kan man anvÀnda webblÀsaren: leta genom sidans kÀllkod, lÀsa meddelanden i utvecklarkonsolen. Men utvecklaren kommer att behöva grÀva djupt i koden. Processen kan pÄskyndas med automatiserade analysverktyg, till exempel: , gratisprogrammet Lighthouse eller den betalda programvaran Screaming Frog SEO Spider.
SĂ„rbarhet kan ocksĂ„ uppstĂ„ pĂ„ grund av problem med legacy-kod â kod som har Ă€rvts. Till exempel, om en del av sidorna genereras av en gammal mall dĂ€r övergĂ„ngen till https inte beaktas.   Â
- Cookies utan flaggorna "HTTPOnly" och "secure".
Attributet "HTTPOnly" skyddar cookies frĂ„n att behandlas av skript som angripare anvĂ€nder för att stjĂ€la anvĂ€ndardata. Flaggan "secure" tillĂ„ter inte överföring av cookies i klartext. Datautbytet tillĂ„ts endast om sĂ€krad protokoll HTTPS anvĂ€nds för att skicka cookies.Â
BÄda attributen anges i cookie-egenskaper:
Set-Cookie: Secure; HttpOnlyVad Ă€r faran: Om webbplatsens utvecklare inte angav dessa attribut kan angriparen snappa upp anvĂ€ndarinformation frĂ„n cookies och anvĂ€nda den. Om cookies anvĂ€nds för autentisering och auktorisering kan hen ta över anvĂ€ndarens session och utföra Ă„tgĂ€rder pĂ„ webbplatsen i dennes namn.Â
Vad webbprogrammerare bör komma ihÄg: I populÀra ramverk anges dessa attribut vanligtvis automatiskt. Men kontrollera alltid webbserverns konfiguration och stÀll in flaggan: Set-Cookie HttpOnly; Secure.
Observera att attributet "HTTPOnly" gör cookies osynliga Ă€ven för din egen JavaScript. Â
- Path-Based Vulnerabilities ("vÀgbaserade" sÄrbarheter).
Skannern rapporterar om en sÄrbarhet nÀr den hittar en offentligt tillgÀnglig fil eller katalog pÄ webbplatsen med potentiellt konfidentiell information. Till exempel upptÀckta enskilda filer med systemkonfiguration eller Ätkomst till hela filsystemet. Denna situation kan uppstÄ om ÄtkomstrÀttigheterna pÄ webbplatsen Àr felaktigt instÀllda.
Vad Ă€r faran: Om filsystemet "syns utĂ„t" kan en angripare fĂ„ tillgĂ„ng till operativsystemets grĂ€nssnitt och försöka hitta mappar med lösenord om de lagras i klartext (gör inte sĂ„!). Alternativt kan de stjĂ€la hash-koder för lösenord och försöka gissa lösenordet, samt försöka höja sina privilegier i systemet och avancera djupare in i infrastrukturen. Â
Vad webbprogrammerare bör komma ihÄg: Glöm inte ÄtkomstrÀttigheterna och konfigurera plattformen, webbservern och webbapplikationen sÄ att ingen kan "fly" frÄn webbkatalogen.
- FormulÀr för att ange konfidentiell information med aktiverad autofyllfunktion.
Om en anvĂ€ndare ofta fyller i formulĂ€r pĂ„ webbplatser sparar deras webblĂ€sare denna information med autofyllfunktionen.Â
FormulĂ€r pĂ„ webbplatser kan inkludera fĂ€lt med konfidentiell information, till exempel lösenord eller kreditkortsnummer. För sĂ„dana fĂ€lt bör autofyllfunktionen inaktiveras pĂ„ webbplatsen.Â
Vad Ă€r faran: Om anvĂ€ndarens webblĂ€sare sparar konfidentiell information kan en angripare fĂ„nga upp den senare, till exempel genom phishing. I grund och botten utsĂ€tter webbdesignern, som glömmer detta detalj, sina anvĂ€ndare.Â
Vad webbprogrammerare bör komma ihĂ„g: I detta fall har vi en klassisk konflikt: bekvĂ€mlighet vs sĂ€kerhet. Om webbdesignern prioriterar anvĂ€ndarkomfort kan de medvetet vĂ€lja autofyllning. Till exempel, om det Ă€r viktigt att följa â riktlinjer för tillgĂ€nglighet av innehĂ„ll för anvĂ€ndare med funktionsnedsĂ€ttningar.Â
För de flesta webblÀsare kan autofyll inaktiveras med attributet autocompete="off", till exempel:
 <body> <form action="/sv/form/submit/" method="get" autocomplete="off" data-trp-original-action="/form/submit"> <div> <input type="text" placeholder="Förnamn"> </div> <div> <input type="text" id="lname" placeholder="Efternamn" autocomplete="on"> </div> <div> <input type="number" placeholder="Kreditkortsnummer"> </div> <input type="submit"> <input type="hidden" name="trp-form-language" value="sv"/></form> </body>Men för Chrome fungerar det inte. Detta kringgĂ„s med hjĂ€lp av JavaScript, en variant av receptet kan hittas .Â
- I webbplatsens kod Ă€r X-Frame-Options-rubriken inte angiven.Â
Denna rubrik pÄverkar taggar som frame, iframe, embed eller object. Genom att anvÀnda den kan du helt förbjuda inbÀddning av din webbplats i ett ramverk. För detta mÄste du ange vÀrdet X-Frame-Options: deny. Alternativt kan du ange X-Frame-Options: sameorigin, vilket gör inbÀddning i iframe tillgÀnglig endast pÄ din egen domÀn.
Vad Ă€r faran: Avsaknaden av denna rubrik kan anvĂ€ndas pĂ„ skadliga webbplatser för clickjacking. För denna attack skapar angriparen en genomskinlig ram ovanför knappar och lurar anvĂ€ndaren. Till exempel placerar bedragare en ram för en sida med sociala medier. AnvĂ€ndaren tror att de klickar pĂ„ en knapp pĂ„ denna webbplats. IstĂ€llet fĂ„ngas klicket och skickar en begĂ€ran frĂ„n anvĂ€ndaren till sociala medier dĂ€r det finns en aktiv session. PĂ„ sĂ„ sĂ€tt skickar angriparna skrĂ€ppost i anvĂ€ndarens namn eller manipulerar prenumeranter och gilla-markeringar.Â
Om denna möjlighet inte förhindras kan angriparen placera en knapp för din applikation pĂ„ en skadlig webbplats. Hen kan vara intresserad av ditt referralsprogram eller dina anvĂ€ndare. Â
Vad webbprogrammerare bör komma ihĂ„g: En sĂ„rbarhet kan uppstĂ„ om X-Frame-Options med ett konfliktvĂ€rde anges pĂ„ webbservern eller lastbalanseraren. I detta fall kommer servern och lastbalanseraren helt enkelt att Ă„sidosĂ€tta rubriken, eftersom de har högre prioritet Ă€n koden för backend-delen. Â
VÀrdena deny och sameorigin för X-Frame-Options-rubriken kommer att störa webvisorens funktioner frÄn Yandex. För att tillÄta anvÀndning av iframe för webvisor mÄste du skriva en separat regel i instÀllningarna. Till exempel kan det för nginx konfigureras sÄ hÀr:
http{ ... map $http_referer $frame_options { "~webvisor.com" "ALLOW-FROM http://webvisor.com"; default "SAMEORIGIN"; } add_header X-Frame-Options $frame_options; ... } - SĂ„rbarheter PRSSI (Path-relative stylesheet import). Â
Detta Ă€r en sĂ„rbarhet i webbplatsens stilar. Den uppstĂ„r om relativa lĂ€nkar av typen href="/somefolder/styles.css/" anvĂ€nds för att referera till stilfiler. En angripare kommer att utnyttja detta om de hittar ett sĂ€tt att omdirigera anvĂ€ndaren till en skadlig sida. Sidan kommer att infoga den relativa lĂ€nken i sin URL och imitera en begĂ€ran om stilar. Resultatet blir en begĂ€ran liknande badsite.ru/.../somefolder/styles.css/, som under sken av stil kan utföra skadliga handlingar.Â
Vad Àr faran: En bedragare kan utnyttja denna sÄrbarhet om de hittar en annan sÀkerhetslucka. Som ett resultat kan anvÀndardata frÄn cookies eller tokens stjÀlas.
Vad webbprogrammerare bör komma ihÄg: SÀtt rubriken X-Content-Type-Options: nosniff. I sÄ fall kommer webblÀsaren att kontrollera innehÄllstypen för stilar. Om typen skiljer sig frÄn text/css kommer webblÀsaren att blockera begÀran.
Kritiska sÄrbarheter
- Sidan med fÀlt för lösenord överförs frÄn servern via en osÀker kanal (HTML-formulÀr med lösenordsfÀlt överförs via HTTP).
Svaret frĂ„n servern över en okrypterad kanal Ă€r sĂ„rbart för man-in-the-middle-attacker. En angripare kan fĂ„nga upp trafiken och klippa in sig mellan klienten och servern nĂ€r sidan gĂ„r frĂ„n servern till klienten.Â
Vad Ă€r faran: En bedragare kan manipulera sidan och skicka en formulĂ€r för konfidentiella uppgifter till anvĂ€ndaren, som sedan gĂ„r till angriparens server.Â
Vad webbprogrammerare bör komma ihÄg: Vissa webbplatser skickar en engÄngskod via e-post/telefon istÀllet för ett lösenord. I detta fall Àr sÄrbarheten inte sÄ kritisk, men mekanismen kan försvÄra livet för anvÀndarna.
- Skickar formulÀr med anvÀndarnamn och lösenord via en osÀker kanal (InloggningsformulÀret skickas inte via HTTPS).
I detta fall skickas formulÀret med anvÀndarnamn och lösenord till servern via en okrypterad kanal.
Vad Ă€r faran: Till skillnad frĂ„n det föregĂ„ende fallet Ă€r detta en kritisk sĂ„rbarhet. Att fĂ„nga konfidentiella uppgifter Ă€r enklare, eftersom du inte ens behöver skriva kod för det.Â
- AnvÀndning av JavaScript-bibliotek med kÀnda sÄrbarheter.
Under tiden för skanning har jQuery blivit det mest anvĂ€nda biblioteket med ett omfattande utbud av versioner. I varje version finns det Ă„tminstone en, eller fler, kĂ€nda sĂ„rbarheter. Effekten kan variera â beroende pĂ„ sĂ„rbarhetens natur.
Vad Àr faran: För kÀnda sÄrbarheter finns det exploits, exempelvis:

Vad webbprogrammerare bör komma ihĂ„g: Ă terkom regelbundet till cykeln: söka kĂ€nda sĂ„rbarheter â Ă„tgĂ€rda â kontrollera. Om du medvetet anvĂ€nder förĂ„ldrade bibliotek, exempelvis för att stödja gamla webblĂ€sare eller för att spara budgeten, leta efter möjligheter att Ă„tgĂ€rda kĂ€nda sĂ„rbarheter. - Cross-Site Scripting (XSS).Â
Cross-Site Scripting (XSS), eller mellanwebbskrift, Àr attacker mot webbapplikationer dÀr skadlig kod hamnar i databasen. Om Qualys hittar en sÄdan sÄrbarhet innebÀr det att en potentiell angripare kan ha injicerat eller redan har injicerat sin js-kod i webbplatsens kod för att utföra skadliga handlingar.Lagrat XSS (Stored XSS) Àr mer farliga eftersom skriptet injiceras pÄ servern och körs varje gÄng den attackerade sidan öppnas i webblÀsaren.
Reflekterat XSS (Reflected XSS) Àr enklare att genomföra, eftersom den skadliga skriptet kan injiceras i HTTP-förfrÄgan. Applikationen tar emot HTTP-förfrÄgan, kontrollerar inte data, packar dem och skickar dem omedelbart. Om angriparen fÄngar trafiken och sÀtter in ett skript av typen
<script>/*+ŃŃĐŸ+ŃĐŸ+ĐżĐ»ĐŸŃ ĐŸĐ”+*/</script>gĂ„r en skadlig begĂ€ran frĂ„n klientens namn.
Ett tydligt exempel pĂ„ XSS: js-sniffers som imiterar sidor för att ange CVC, utgĂ„ngsdatum pĂ„ kort och sĂ„ vidare.Â
Vad webbprogrammerare bör komma ihĂ„g: I rubriken Content-Security-Policy anvĂ€nd attributet script-src för att klientens webblĂ€sare endast ska ladda och köra kod frĂ„n en betrodd kĂ€lla. Till exempel, script-src 'self' lĂ€gger alla skript frĂ„n vĂ„r webbplats pĂ„ vitlistan.Â
Den bÀsta metoden anses vara Inline-kod: tillÄt endast inline javascript med vÀrdet unsafe-inline. Detta vÀrde tillÄter anvÀndning av inline js/css, men förbjuder inte laddning av js-filer. I kombination med script-src 'self' förbjuder vi körning av externa skript.Se till att logga allt med hjÀlp av report-uri och titta pÄ försök att injicera kod pÄ webbplatsen.
- SQL-injektioner.
SĂ„rbarheten antyder att det finns möjlighet att injicera SQL-kod pĂ„ webbplatsen, som direkt kontaktar webbplatsens databas. SQL-injektion Ă€r möjlig om anvĂ€ndardata inte Ă€r korrekt sĂ€kerstĂ€lld: de kontrolleras inte för giltighet och anvĂ€nds omedelbart i förfrĂ„gan. Till exempel sker detta om formulĂ€ret pĂ„ webbplatsen inte kontrollerar att indata överensstĂ€mmer med datatypen.ÂVad Ă€r faran: Om en angripare matar in en SQL-frĂ„ga i ett sĂ„dant formulĂ€r kan han förstöra databasen eller avslöja konfidentiell information.Â
Vad webbprogrammerare bör komma ihĂ„g: Lita inte pĂ„ det som kommer frĂ„n webblĂ€saren. Skydd bör göras bĂ„de pĂ„ klientsidan och pĂ„ serversidan.Â
PĂ„ klientsidan, skriv en kontroll av fĂ€lten med hjĂ€lp av JavaScript.Â
Inbyggda funktioner i populÀra ramverk hjÀlper ocksÄ till att skydda misstÀnkta tecken pÄ servern. PÄ servern rekommenderas det ocksÄ att anvÀnda parametriserade databasfrÄgor.
Definiera var interaktionen med databasen sker i webbapplikationen.Â
Interaktionen uppstĂ„r nĂ€r vi hĂ€mtar nĂ„gon information: en förfrĂ„gan med id (Ă€ndring av id), skapande av en ny anvĂ€ndare, ny kommentar â nya poster i databasen. HĂ€r kan SQL-injektioner uppstĂ„. Ăven nĂ€r vi tar bort en post frĂ„n databasen kan en SQL-injektion vara möjlig.
AllmÀnna rekommendationer
Hitta inte pĂ„ hjulet â anvĂ€nd beprövade ramverk. Vanligtvis Ă€r populĂ€ra ramverk mer sĂ€kra. För .NET Ă€r det ASP.NET MVC och ASP.NET Core, för Python â Django eller Flask, för Ruby â Ruby on Rails, för PHP â Symfony, Laravel, Yii, för JavaScript â Node.JS-Express.js, för Java â Spring MVC.
HÄll dig uppdaterad med leverantörens nyheter och uppdatera regelbundet. SÄrbarheter hittas, exploateringskod skrivs, publiceras och allt hÀnder igen. Prenumerera pÄ uppdateringar till stabila versioner frÄn programvaruleverantören.
Kontrollera ÄtkomstrÀttigheter. Behandla alltid din kod frÄn serverns sida som om den Àr skriven av din mest avskyvÀrda fiende, som vill bryta din webbplats och bryta integriteten av dina data. Dessutom Àr det ibland faktiskt sÄ.
AnvĂ€nd kloner, testmiljöer, och implementera sedan pĂ„ produktion. Detta hjĂ€lper, Ă„ ena sidan, att undvika misstag och brister i produktionsmiljön: produktionsmiljön genererar pengar, driftstopp i produktionsmiljö Ă€r kritiska. Vid tillĂ€gg, korrigering eller stĂ€ngning av ett problem bör arbetet utföras i testmiljö, sedan kontrolleras funktionaliteten och identifierade sĂ„rbarheter, och först dĂ€refter planera arbete med produktionsmiljön.Â
Skydda webbapplikationen med och integrera med den rapporter frÄn sÄrbarhetsscannern. Till exempel i DataLine anvÀnds Qualys och FortiWeb som en bindande tjÀnst.
KĂ€lla: habr.com


