jeudi, juillet 28 2011

Infomaniak et SSLv2

En tant que client Informaniak, je met à jour régulièrement les scripts installés sur mon hébergement et audite mes applications pour éviter les failles les plus courantes. J’attends de mon hébergeur qu’il applique une certaine diligence lui-même. Malheureusement, et ce pour la première fois que je suis clien t chez Infomaniak, j’ai été déçu…

Le problème se situe dans l’option SSL (CHF 10 de plus par année): comme dans toutes les installations Apache par défaut, SSL version 2 est activé avec une série de chiffrement désormais considéré peu robuste.

Le résultat d’un test en ligne à l’aide d’un outil tel que https://www.ssllabs.com/ssldb/analyze.html?d=www.ness.ch&hideResults=on est sans appel:

image

D’après mes recherches, il semble qu’il soit possible de désactiver SSLv2 et de bannir les méthodes de chiffrement peu sûres à l’aide de la ligne suivante dans un fichier .htaccess:

###        SSL stuff        ###
# Sources:     http://blog.zenone.org/2009/03/pci-compliance-disable-sslv2-and-weak.html
#            http://www.askapache.com/htaccess/apache-ssl-in-htaccess-examples.html
SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH

Malheureusement ces directives ne sont pas prises en comptes par le serveur. La réponse du service technique confirmera que dans leur configuration actuel, il n’est pas autorisé de spécifier ce type de paramètres au niveau .htaccess. Toujours d’après le service technique, il n’est pas non plus prévu d’adapter cela prochainement – très dommage!

mercredi, juin 8 2011

Android Map de Samy - et comment obtenir les BSSID

Google a constitué au fil du temps une base de donnée assez intéressante associant coordonnées géographiques et adresse des BSSID WiFi (adresse MAC de l’Access Point WiFi).

Le but de cet article n’est pas de débattre des moyens mis en oeuvre pour cette collecte (voitures Google Maps et téléphones Android en tout cas…), ni leur légalité. Non, l’idée est de permettre à n’importe qui d’interroger cette base de données à l’aide de l’outil android map développé par Samy.

1. Trouver les BSSID

Histoire de tester la fonction pour vous-même, le plus simple est de demander à votre machine Windows – possédant une carte WiFi – de lister les divers réseaux sans fils autour de vous. Pour cela il suffit de

  1. Ouvrir une console (cmd.exe)
  2. Entrer la command netsh wlan show all

Tous les détails des réseaux sans fils avoisinants vous sont renvoyés, y compris les BSSIDs.

L’autre solution est de partir avec un BSSID connu. Pour l’exemple ci-après, j’ai fait une rapide recherche Google (!) avec les mots clés wifi bssid pour trouver un imprudent qui avait laissé des détails en ligne:

image

2. Interroger android map

Rien de plus simple, il suffit de copier le BSSID dans l’outil de samy et celui-ci nous gratifie d’une carte Google Maps avec les coordonnées estimées de l’Access Point ainsi que la précision de cette position.

Le détail JSON de la réponse provenant de Google donne plus d’informations, tels que la ville, région, pays etc.

image 

(exemple basé sur le SSID trouvé sur Internet)

samedi, janvier 8 2011

Example of Cross-Site Scripting (XSS) without any need of parenthesis or single quote

Some people still think that black-listing some special characters or encoding only a handful of them solves all XSS issues. Here's hopefully another proof that blacklisting isn't enough:

In a recent example, the following user-supplied characters on a page were encoded to their HTML entities:

  • >
  • <
  • (
  • )
  • '

The custom method (called afterward customXSSFilter()) also removed any string matching "eval", "alert" or "script".

Obviously, the standard <script>alert('xss');</script> doesn't work in such a case, but is it really enough?

The login page of this web application has a feature where the userid could be pre-set on the login form. Let's take this example:

Request: login.asp?userid=EvilXSS

[...]
<form>
  <input type="text" name="userid" value="<%= customXSSFilter(Request.QueryString("userid")) %>">
[...]

Closing the input tag isn't an option, as the needed character is encoded by customXSSFilter(). As double-quotes aren't encoded, we could close the value attribute without troubles and therefore execute CSS Expressions if the victim is running IE below version 8. But the aim is to find a proof of concept that code can be executed on any browser.

Instead of adding a style attribute with our JavaScript payload, we'll add an event where this will also be possible. Event onfocus works on the input tag and requires little user-interaction to get fired by the browser. But what kind of malicious action can we do, as ( and ) get encoded and are required for most of the JavaScript methods?

An action which doesn't require parenthesis to run is to redirect the user using location.href = [destination]. But specifying an URL in the injected event (such as " onfocus="location.href='http://target') doesn't work according to plan as single quotes are also encoded.

The trick relies on a specificity of the input tag, which allows an attribute named src for the case its type is button. As we can create as many attributes as wanted, we can finally inject the following payload onto the login page:

Request: login.asp?userid=EvilXSS" src="http://malicious.website" onfocus="location.href=this.src

HTML result:

[...]
<form>
  <input type="text" name="userid" value="EvilXSS" src="http://malicious.website" onfocus="location.href=this.src">
[...]

Morality: blacklist, especially self-made ones, are rubbish. Use only white lists or libraries written by security professionals.

page 2 de 2 -