Scriptorama.nl

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

Microsoft brengt update uit voor IE6 VPC image

Om webdevelopers tegemoet te komen en ze in staat te stellen om sites gemakkelijk in zowel IE7 als IE6 te testen bood Microsoft al een tijdje een Virtual PC image aan met daarin een Windows XP installatie met Internet Explorer 6. Er was echter 1 probleempje, deze image zou verlopen op 1 April 2007 en dit terwijl het marktaandeel van IE7 ongeveer net zo groot is als IE6. Het is dus voor veel webdevelopers nog belangrijk om nog te kunnen testen in Internet Explorer 6. Gelukkig heeft Microsoft gister een update uitgebracht voor dit image:

In my original blog post about releasing the IE6 Virtual PC Image, we mentioned that it would expire on April 1st, 2007 (no, it wasn’t an April Fool’s joke), and that we’d be releasing a new VPC image to replace it sometime in March. Well, I’m happy to report that I propped the new VHD up on Monday morning. You can download the image here. Take note that a free download of Virtual PC 2007 is now available, replacing VPC2004.

Kortom, voorlopig kun je nog IE6 en IE7 naast elkaar draaien met de XP + IE6 Virtual PC image, welke overigens op 23 Juli weer verloopt.

Adobe brengt alpha-versie Apollo uit

Vandaag heeft Adobe een alpha versie uitgebracht van haar nieuwe RIA ( Rich Internet Application ) platform Apollo genaamd:

Apollo is the code name for a cross-operating system runtime being developed by Adobe that allows developers to leverage their existing web development skills (Flash, Flex, HTML, JavaScript, Ajax) to build and deploy rich Internet applications (RIAs) to the desktop.

Apollo enables developers to create applications that combine the benefits of web applications – network and user connectivity, rich media content, ease of development, and broad reach – with the strengths of desktop applications – application interactions, local resource access, personal settings, powerful functionality, and rich interactive experiences.

Het Apollo platform zou web ontwikkelaars in staat moeten stellen om met al bekende componenten zoals Flash, HTML en Javascript zogenaamde 'rich internet applicaties' te ontwikkelen en deze (cross-platform) te distribueren zonder daarbij de beperkingen van de huidige web browsers te hebben. Zo kan een Apollo applicatie bijvoorbeeld wel het filesystem benaderen, of bijvoorbeeld connecties leggen naar andere systemen. Om de Apollo applicatie van informatie te voorzien kan ook gewoon gebruik gemaakt worden van bestaande systemen. Een manier om gegevens op te halen is namelijk, net als in je browser, via een XMLHttpRequest object.

Om al dit mogelijk te maken is gebruik je voor Apollo applicaties geen webbrowser zoals Firefox of IE maar enkel de Apollo Runtime. Je download de applicatie en opent deze vervolgens met de Apollo Runtime. Om de applicatie te kunnen draaien moet een Apollo applicatie worden "geinstalleerd" op je PC en daar zorgt de runtime zelf voor. De gebruiker krijg een vrij opvallende dialoog te zien wanneer een Apollo Applicatie op het punt staat om geinstalleerd te worden:

Apollo

Om zelf met Apollo te spelen kun je de Apollo runtime downloaden, verschillende demo applicaties -zoals een RSS reader of een applicatie met Google maps integratie - proberen en als je wat avontuurlijk bent ingesteld ook alvast de Apollo SDK downloaden (registratie vereist) om daar zelf mee te spelen. Wil je meer weten over Apollo, check dan de Apollo Developer FAQ:

What security model does the Apollo runtime provide?

Our goal is to provide the functionality that developers need and want, while also allowing them to create secure applications.

While we are still finalizing the security policy, at the root of any policy is the fact that Apollo applications are download to and installed and run from the user's desktop. They thus run in a different security context than applications that run in the browser, and will have a security model closer to that of a desktop application.

My take: Ik ben er nog niet helemaal over uit hoe blij ik ben met het feit dat een Apollo applicatie veel meer toegang heeft tot mijn PC en dat een applicatie geinstalleerd moet worden voordat deze gebruikt kan worden. Desondanks heeft Adobe met Apollo wel een mooie formule in handen. Met Apollo zijn uitgebreidere Rich Internet Applicaties mogelijk dan met de huidige web browsers maar doordat Apollo zelf ook nog eens met Webkit (de rendering engine van Safari) komt wordt compatibiliteit met reeds bestaande websites en applicaties niet opgegeven. Clever.

Firefox 3 komt met HttpOnly-cookie ondersteuning

Het zal wel een beetje een koude dag in de hel zijn, maar de volgende versie van Firefox, Firefox 3.0, zal een feature bevatten die zijn oorsprong kent uit Microsoft Internet Explorer: HttpOnly cookies. Een HttpOnly cookie krijgt een flag mee welke de browser vertelt dat dit cookie niet uitgelezen mag worden door Javascript:

If Internet Explorer 6.0 SP1 (available in Microsoft Windows® XP SP1 and at the
Windows Update Site) detects a cookie marked HttpOnly and some client side
script code, such as JavaScript, attempts to read the cookie (document.cookie,
for example), Internet Explorer returns an empty string, thus preventing the
attack by preventing the malicious code in the XSS attack from sending the data
back to a malicious site. Of course, the cookie is passed to and from the
originating server as normal; the browser using script code just can't read it.
A cookie is set on the client with an HTTP response header. The following shows
the syntax used in this header:

Set-Cookie: <name>=<value>[; <name>=<value>]
[; expires=<date>][; domain=<domain_name>]
[; path=<some_path>][; secure][; HttpOnly]

Kortom, als een stuk Javascript een HttpOnly cookie probeert uit te lezen krijgt deze simpelweg een lege string terug. Door bijvoorbeeld session cookies als HttpOnly cookie te versturen zorg je er voor dat de impact van een mogelijk cross-site-scripting probleem binnen je site een stuk minder wordt -> de aanvaller kan met een HttpOnly session cookie nooit het sessie ID opvragen en daar vervolgens vervelende dingen mee te doen. Uiteraard is dit niet een oplossing voor cross-site-scripting maar meer een soort veiligheidsnet voor de keren dat het wel voorkomt.

PHP bevat sinds versie 5.2 ook ondersteuning voor HttpOnly cookies, doormiddel van het 7e (!) argument aan SetCookie():

PHP:
  1. setcookie ( string $name [, string $value [, int $expire [, string $path [, string $domain [, bool $secure [, bool $httponly]]]]]] )

Tevens kun je met de setting session.cookie_httponly aangeven dat de session cookie ook als HttpOnly cookie verstuurd moet worden. Heb je nog geen PHP 5.2, dan kun je met een header() aanroep natuurlijk zelf een cookie zetten met de HttpOnly flag:

PHP:
  1. header("Set-Cookie: name=value; expires=0; path=/; HttpOnly");

Voor HttpOnly session cookies zul je echter moeten upgraden naar PHP 5.2

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.