Scriptorama.nl

Header image showing a keyboard, mouse, laptop and books on design patterns

Google implementeert OAuth voor Data services

Een van de dingen die veel social websites, zoals Twitter, Hyves en Facebook doen is je de mogelijkheid geven om in hun database naar jouw vrienden te zoeken aan de hand van bijvoorbeeld hun e-mailadres. Daar is echter een probleempje mee, ze vragen vaak om je (gmail, live.com, yahoo) email wachtwoord.

(more...)

Apple vindt lekken in Ruby

Een tijdje geleden hadden we de Month of PHP Bugs, maar deze keer is het Ruby die er van langs krijgt. Het Security Team van Apple heeft namelijk 5 serieuze lekken in Ruby gevonden.

(more...)

Een blik op MySQLi IV: Transacties en SSL

In de vorige 3 MySQLi artikelen hebben we het gehad over het basis gebruik van MySQLi, prepared queries en unbuffered queries. In dit artikel zullen we zien hoe je met transacties kunt werken en hoe je een beveiligde verbinding kunt opzetten met MySQL.

(more...)

Maand van de problemen met browsers

We hebben allerlei "maand van-" series gehad de afgelopen tijd: de maand van Apple bugs, de maand van PHP bugs, enzovoorts. Deze maand lijkt wel een beetje de maand van de browser problemen te zijn. 5 problemen met Firefox en Internet Explorer.

(more...)

Quick tip: waarden controlen met preg_match() in PHP

Nadat Stefan Esser vorige maand er maar liefst 44 security advisories voor PHP uitgegooid heeft tijdens de Month of PHP Bugs, komt hij vandaag op zijn weblog met een goede tip wat betreft het controleren van waarden door middel van preg_match(): gebruik de D modifier wanneer je ook de start (^) en end ($) anchors gebruikt, anders kunnen bepaalde waarden erdoorheen komen (anchors? modifiers? geen idee waar ik het over heb? Lees onze regular expressions tutorial):

PHP:
  1. if ( preg_match ( '~^[0-9]+$~', "1234\n" ) )
  2. {
  3.     echo "Dit is een nummer";
  4. } else {
  5.     echo "Dit is geen juist nummer.";
  6. }

Wanneer je deze code uitvoert zul je, waarschijnlijk onverwacht, de volgende uitvoer krijgen:

CODE:
  1. Dit is een nummer

Stefan stelt dat iedereen die code hierboven wel eens heeft geschreven de PHP PCRE handleiding niet goed heeft gelezen (ik ben alvast guilty as charged) en dat we bij dit soort controles de 'D' modifier moeten gebruiken. En verdomd, het klopt, want als je even bij de Pattern Modifiers sectie (en dat doen we toch allemaal vrij regelmatig? :-) ) van de PHP PCRE handleiding kijkt zie je het volgende:

D (PCRE_DOLLAR_ENDONLY)
If this modifier is set, a dollar metacharacter in the pattern matches only at the end of the subject string. Without this modifier, a dollar also matches immediately before the final character if it is a newline (but not before any other newlines). This modifier is ignored if m modifier is set. There is no equivalent to this modifier in Perl.

Oftewel, zonder de D modifier wordt het laatste karakter (maar alleen als dat een newline is) ook meegenomen in de match voor het end-anchor ($). In veel gevallen zal een meekomende newline niet veel problemen kunnen veroorzaken, maar in enkele gevallen kunnen er toch wat ongewenste dingen plaats vinden. Zo zou een emailadres met een extra newline, bij het versturen van een email naar meerdere mensen door middel van de BCC-headers, er voor kunnen zorgen dat de rest van de headers niet wordt geinterpreteerd als headers maar als content. Op die manier zou je zo maar per ongeluk klant-emailadressen kunnen lekken. Zie ook ons artikel: Voorkom email-header injection.

Kortom, de juiste manier om een complete match af te dwingen is dus gebruik te maken van de D modifier:

PHP:
  1. if ( preg_match ( '~^[0-9]+$~D', "1234\n" ) )
  2. {
  3.     echo "Dit is een nummer";
  4. } else {
  5.     echo "Dit is geen juist nummer.";
  6. }

Misschien is het, aangezien preg_match() veel voor validatie doeleinden gebruikt wordt, een idee om dit specifieke voorbeeld maar op te nemen bij de documentatie voor preg_match().

Stefan Esser start Month of PHP Bugs

Zoals we al schreven bij de release van PHP 5.2.1 was Stefan Esser van plan om in maart een Month Of PHP Bugs (MOPB) te houden net zoals deze ook al eens gehouden werd voor Apple software (MOAP). Maart is inmiddels begonnen en Stefan Esser is dan ook meteen los gegaan en heeft al niet minder dan 5 advisories vrijgegeven:

  • MOPB-01 - PHP 4 Userland ZVAL Reference Counter Overflow Vulnerability In PHP 4 userland code is able to overflow the internal 16bit zval reference counter by creating many references to a variable. This leads to an exploitable double dtor condition.
  • MOPB-02 - PHP Executor Deep Recursion Stack Overflow A deep recursion of PHP userland code will exhaust all available stack which leads to a sometimes remotely triggerable crash.
  • MOPB-03 - PHP Variable Destructor Deep Recursion Stack Overflow The destruction of deeply nested PHP arrays will exhaust all available stack which leads to remotely triggerable crashes.
  • MOPB-04 - PHP 4 unserialize() ZVAL Reference Counter Overflow During unserialisation of user supplied data that contains a lot of references to a variable the internal 16bit zval reference counter can overflow. This leads to an exploitable double dtor condition.
  • MOPB-05 - PHP unserialize() 64 bit Array Creation Denial of Service Vulnerability Deserialisation of malformed PHP arrays from within unserialize() might result in a tight endless loop exhausting CPU ressources on 64bit systems.

Deze problemen zijn wel serieus maar gelukkig niet allemaal unpatched. Sommige problemen zijn reeds opgelost in de meest recente versies van PHP, terwijl andere alleen in PHP4 een probleem zijn. In andere gevallen zijn de problemen te omzeilen door Stefan Esser's Suhosin extensie te gebruiken.

Met de eerste advisories een Proof-of-Concept exploits beschikbaar wordt het interessant om te zien hoe de PHP ontwikkelaars gaan reageren op de claims van Esser. Ondanks de wat moeizame relaties tussen Stefan Esser en de PHP group lijkt het mij dat de PHP group het zich niet kan veroorloven om niet te reageren op deze zaken. Zeker met de mogelijke exploits die bijv. door MOPB-04 worden beschreven.

In ander nieuws: PHP 4.4.6 is vrijgegeven met een oplossing voor een crash in 4.4.5 dat kon ontstaan wanneer je sessies en register_globals gebruikte.

Adobe Reader PDF backdoors

David Kierznowski, security specialist in web applicaties, heeft een interessante manier gevonden om Adobe's PDF reader te misbruiken. Hij legt uit hoe je achterdeurtjes in PDF bestanden kunt maken.

At first glance PDF documents seem obviously vulnerable. This is due to the fact that it supports JavaScript.

Hij heeft twee voorbeeld PDF bestanden. Backdoor 1, heeft een 'evil' link in het document. Bij het openen van dit bestand krijg je automatisch een redirect naar een ander URL. Wat zo gevaarlijk hieraan is dat je dus ook andere gevaarlijke code kunt toevoegen. Meeste lezers zullen niet PDF bestanden associeren met 'gevaarlijke code' en dat maakt dit ook gevaarlijk.

De tweede backdoor is nog gevaarlijker. Het is mogelijk om lokaal de ODBC database te benaderen via Adobe’s ADBC (Adobe Database Connectivity) en er is ook nog eens ondersteuning voor Web services. Je kunt code uitvoeren die opzoek gaat naar databases, alle informatie ophaalt en deze verstuurt via een web services.

I am sure with a bit more creativity even simpler and/or more advanced attacks could be put together. Adobe Acrabat supports, “HTML forms”, “File system access” and the list goes on.

Een mooie afsluiter van David:

The future of exploitation lies in Web technologies.

Microsoft Research’s “BrowserShield”

Eweek rapporteert dat een deel van de onderzoeks divisie van Microsoft de laatste tijd bezig is geweest met een techniek die onwetende websurfers moet beschermen tegen trojans en andere rotzooi die we tegenkomen op het web:

"This can provide another layer of security, even on unpatched browsers," Wang said in an interview with eWEEK. "If a patch isn't available, a BrowserShield-enabled tool bar can be used to clean pages hosting malicious content."

(more...)

Je browser history onderzoeken met CSS en Javascript

Whitehat Jeremiah Grossman heeft een hele interessante bevinding gevonden. Door middel van CSS en Javascript is het namelijk mogelijk proberen te achterhalen welke websites je hebt bezocht, door je browser history indirect te controleren. Wat is de truuk?
(more...)

Hardened-PHP brengt Suhosin uit

Na de release van PHP 4.4.3 moet Stefan Esser gedacht hebben dat het allemaal lang genoeg geduurd heeft want het Harderend-PHP project laat weer eens van zich horen.

Het Hardened-PHP project dat, zoals de naam al doet vermoeden, zich bezig houdt met het verstevigen van de PHP broncode voor aanvallen van buitenaf heeft een nieuwe uitbreiding voor PHP uitgebracht met de naam Suhosin. Hiermee kunnen veel voorkomende problemen met PHP websites van te voren worden afgevangen en dat maakt het interessant voor bijvoorbeeld hosting bedrijven.

(more...)