ugrás a tartalomhoz

Email beszúrás sebezhetőségek és elkerülésük

Poetro · 2006. Már. 2. (Cs), 14.14
A php|architect és a Pro PHP legutóbbi közös podcast-jában érdekes dologról beszélt Chris Shiflett, ez pedig az email injection, melynek egyik legjellemzőbb példája a kéretlen levélküldés rosszul megírt kapcsolatfelvételi űrlap segítségével.

Az email injection lényege

Ha egy weboldalon van egy kapcsolatfelvételi - esetleg valamilyen más hasonló - űrlap, amivel levelet lehet küldeni egy előre meghatározott személynek, illetve egy, a felhasználó által megadott személynek, akkor ha az űrlap feldolgozása nem megfelelő, ezt kihasználva megfelelő utasítások kiadásával vissza lehet élni a szolgáltatással. Elérhető, hogy az e-mail az előre meghatározott célszemély helyett vagy mellett egy vagy több, a rosszindulatú felhasználó által megadott címre menjen el. Ha a levél szövegét is a felhasználó adja meg, akkor a kiküldendő levél tartalma is jelentős mértékben befolyásolható.

Ezt a levelet jobb esetben csak pár felhasználó kapja meg, rosszabb esetben akár titkos másolatként sok száz, illetve ezer felhasználóhoz juthat el. Ez lehetőséget biztosít a nem megfelelően feldolgozott űrlapok esetén különböző kéretlen üzenetek továbbítására, ráadásul úgy, hogy esetleg az üzemeltető nem is tud róla. Ráadásul az ő nevében, azaz email címéről mennek ki a levelek.

Megoldás

Chris több megoldást is vázol a támadás megakadályozására, és más biztonságtechnikai oldalak is kínálnak akár kész megoldást is a védekezésre. A probléma ugyan nem új, de a különböző trójai vírusok terjedésével robotokká tett számítógépek egyre többször ilyen nem megfelelően elkészített űrlapokon keresztül elektronikus hirdetések millióit képesek elküldeni, ezért mindenképpen érdemes felkészülni az ilyen jellegű támadásokra is.
 
1

Nemrég én is belefutottam

pint3r · 2006. Már. 4. (Szo), 10.48
Érdemes komolyan venni a témát, nemrég én is belefutottam ebbe.
A címzett fix volt, viszont a feladót meg lehetett adni és azon kívül, hogy az e-mail cím legyen megadva rendesen, más ellenőrzést nem írtam mellé. Így a from inputtal módosítható volt a kimenő levél fejléce és cc, bcc-ben ki lehetett küldeni a kapcsolatfelvevő űrlap tartalmát másolatban másnak is.

Ami a kész megoldásban le van írva, azóta az összes mezőt olyan mintákkal ellenőrzőm \n és \r-t is beleértve. Ha pedig olyan karaktersort írtak be, ami nagy valószínűséggel ilyen spam próba, akkor küldetek saját magamnak egy e-mail injection report-ot. Névhez én még szigorúbbat használok, csak karakter és szóköz, bár lehet már túl paranoiás vagyok azóta. :)

- pint3r -
2

Egyetértek

Kevlar · 2006. Már. 5. (V), 04.34
Én is pár napja szembesültem ezzel a problémával, be is építettem a php kódba egy függvényt, ami minden POST-olt mezőt ellenőriz, hogy vannak-e benne olyan kifejezések, mint pl. a "cc:", mert akkor egy die-al lelövi az egész scriptet.
(Drasztikus megoldás, de remélhetőleg jóhiszemű felhasználó nem fog vele találkozni...)
Egy link a témáról: http://securephp.damonkohler.com/index.php/Email_Injection
3

botnet

arnyekk · 2006. Már. 5. (V), 11.00
Én is hasonlo problemaval közdöttem a napokban.Az oldalon ugyan szürve vannak a mezők, spam-et küldeni nem sikerült nekik, viszont én kaptam a magamnak beallitott figyelmeztető maileket rendesen. Megvaltoztattam a post valtozok neveit, par nap szunet utan ujra jottek, a vilag minden tajarol, ip-re szürni lehetetlen. Megvaltoztattam a kapcsolat menupont url-jet, most kapjak a 404-et, azota nyugi van.
---
üdv.: arnyek
redsky.hu
4

Korlát nélkül

Baranyai László · 2006. Már. 5. (V), 19.01
Mostanában divatos lett ez a fajta próbálkozás. Szerintem nem feltétlen kell korlátozni az űrlap adatait (pl. újsor ne legyen a címben). Célszerűbb inkább minden ilyen információt az üzenet szövegrészébe elhelyezni.

<?php
 $mybody = "Feladó: ". $_POST['neve'] ." <". $_POST['cime'] .">\n";
 $mybody .= "Hozzászólás témája: ". $_POST['tema'] ."\n";
 $mybody .= $_POST['szoveg'];
 $mybody .= "\n\n---IP=". $_SERVER['REMOTE_ADDR'];
 mail('nekem##kukac##dot.hu','[dot.hu] Feedback',$mybody);
?>
A kapott üzenet így is feldolgozható, szűrhető automatikusan, de nem lehet belenyúlni kívülről. Kapcsolatfelvevő űrlapoknál nekem bevált, a fent említett beszúrós próbálkozós szemetet is megkapom (az illető IP címével :) ).

Üdv.: Laci
5

elkódolás

bbalint · 2006. Már. 6. (H), 01.07
szerintem meg érdemesebb rendesen kódolni a feladó és másegyéb mezőket rendesen…

a magam részéről nem túl gyakran állítok elő ilyen script-eket, viszont olyankor (általában kényelmi okokból) más, külső levél-küldő kódokat használok fel, melyek viszont minden/legtöbb esetben kódolják a tárgy, feladó és másegyéb mezőket az RFC-nek megfelelően.

(szvsz) inkább figyelni kéne a levél megszerkesztésére és nemcsak továbbadni a bejövő változókat a levélküldő fügvénynek.

bbalint
6

más

Anonymous · 2006. Már. 6. (H), 10.37
Én ezt úgy ldottam meg, hogy nem mail-t küldetek. Hanem eltárolom a hozzászólást db -ben. ÉS arról küldetek egy mail-t. Ennyi. Szóval tőlem nem küld senki mail-t.
7

db

pint3r · 2006. Már. 7. (K), 07.56
Szerintem egyértelmű, hogy minden ilyen kiküldött mail-t érdemes adatbázisban is eltárolni, ha bármilyen oknál fogva nem jönne meg az e-mail, akkor azért még ha később is de értesüljön az ember róla.

A feladó és az üzenet korrekt megadása pedig azért lehet hasznos, mert ebben az esetben az e-mail kliensből azonnal lehet válaszolni a bejövő levelekre. Kényelmesebb, mint egy értesítő után belépni az adminisztrációs felületre, majd egy új levelet írni valamilyen módon.

Igaz ebből is látszik a kényelemnek ára van, de a leírásokban ismertetett módszerek használata után már nem hinném, hogy ezek a spammerek bármit is tudnának kezdeni, vagy rosszul gondolom?

- pint3r -