Connexion
Ces billets correspondent à un filtre sur: sécurité

JavaScript Object Notation et sécurité

Le JSON

Le JSON (ou JavaScript Object Notation) est un format de données au format texte qui est décrit dans la RFC 4627. Très utilisé avec le cadre des applications Web2.0 et AJAX, il présente plusieurs avantages:

  • Lisibilité : Peu verbeux, il est facilement lisible pas un être humain.
  • Performances : Comme il utilise une représentation d'objets et une notation empruntés à JavaScript, il s'avère plus facilement et rapidement utilisable dans le contexte d'un traitement par ce langage.
  • Simple : La syntaxe réduite et les types de donnés simples en font un format de données facile à apprendre.

Voici un exemple de données (un menu sous forme de liste d'actions simples):

{"liste": { "id": "liste", "value": "Menu", "popup": { "menuitem": [ {"value": "action 1", "onclick": "MyFunction1()"}, {"value": "action 2", "onclick": "MyFunction2()"}, {"value": "action 3", "onclick": "MyFunction3()"} ] } }}

Et la sécurité dans tous ça

L'utilisation d'une structure de données JSON dans un corps de programme JavaScript est faite par l'utilisation de la fonction :

eval('('+donnees_json+')');

Avec cette méthde, les données sont transformées en objet(s) natif(s) et ainsi utilisables. Mais les données peuvent aussi contenir du code JavaScript et ainsi, celui-ci risque de s'exécuter lors de l'évaluation des données. C'est un problème de sécurité très grâve qui entrave encore bien souvent le déployement de ce format de données en remplacement du concurrent XML.

Des remèdes

La démocratisation et le formidable essor des Frameworks dits Web2.0 au cours de ces dernières années ont contribué à proposer des solutions pour contourner les problèmes de sécurité de ce format pourtant bien utile au demeurant.

Pour ma part j'ai suivi un peu le développement du framework Dojo Toolkit et les essais plus ou moins fructueux pour combattre cette limitation.

On commente

Une des recommandations utilisées notamment pour la version 1.0 de Dojo, était de commenter les données afin d'éviter l'exécution du code qui pouvait y être inclus :

/* {"liste": { "id": "liste", "value": "Menu", "popup": { "menuitem": [ {"value": "action 1", "onclick": "MyFunction1()"}, {"value": "action 2", "onclick": "MyFunction2()"}, {"value": "action 3", "onclick": "MyFunction3()"} ] } }} */

Il s'avère que cette solution est facilement contournable puisqu'il suffit à un attaquant d'injecter des données qui referme ce commentaire avant d'inclure du code à exécuter et de réouvrir un commentaire pour rendre le contenu valide. Ce point a été soulevé et très clairement expliqué dans un ticket du Trac Dojo par Kriszyp.

On préfixe à présent

Kriszyp lors de son explication de la vulnérabilité de la méthode "json-commenting", propose de préfixer les données à l'aide d'une simple petite chaine:

{} &&

Ce préfixe a pour but de rendre invalide (du point de vue de la syntaxe) un éventuel script au sein des données JSON et de ne pas contraindre de trop l'utilisation des données (éviter un parsing).

Du coup, depuis la version 1.2 de Dojo, la recommandation est d'utiliser cette syntaxe :

{} && {"liste": { "id": "liste", "value": "Menu", "popup": { "menuitem": [ {"value": "action 1", "onclick": "MyFunction1()"}, {"value": "action 2", "onclick": "MyFunction2()"}, {"value": "action 3", "onclick": "MyFunction3()"} ] } }}

Conclusion

Il semble que cette méthode est la plus fiable et efficace connue à présent pour éviter le détournement ("hijacking" en anglais) de ce format de données qui a une place au soleil dans le monde du Web 2.0 en plein développement. Reste à surveiller l'émergence d'une réponse ou de technique de contournement afin de conserver la sécurité des applications et des données.

Commentaires: 0 | Buzz it!

Local Root Exploit dans linux !

Posté par inico (Jabber id, page perso) le lundi 11 février

Depuis quelque jours, la nouvelle est tombé dans toute les oreilles: un bug dans vmsplice permet d'élever ses privilèges de simple mortel à Dieu tout puissant.
Le code malfaisant est comme d'habitude sur milw0rm ici => http://www.milw0rm.com/exploits/5092 et là => http://www.milw0rm.com/exploits/5093
Heureusement un patch on-the-fly du kernel est possible: => http://www.ping.uio.no/~mortehu/disable-vmsplice-if-exploita(...)
Le kernel est déjà patché et les distributions devraient incessament sous peu distribué de nouveaux kernel patchés.

http://it.slashdot.org/it/08/02/10/2011257.shtml

----
NdM : Victor Stinner rajoute
Deux exploits root locaux circulent sur Internet : Linux Kernel 2.6.17 - 2.6.24.1 vmsplice Local Root Exploit et Linux Kernel 2.6.23 - 2.6.24 vmsplice Local Root Exploit.

Ils exploitent un bug dans l'appel système vmsplice(). Le noyau 2.6.24.1 corrige partiellement le bug et la version 2.6.24.2 semble le corriger définitivement.

Plus d'informations :
* LKML: "Niki Denev": kernel 2.6.24.1 still vulnerable to the vmsplice local root exploit
* Gentoo : Gentoo Bug 209460 - kernel 2.6.17 - 2.6.24.1 splice: missing user pointer access verification (CVE-2008-{0009,0010})
* Ubuntu : Bug #190587 in linux (Ubuntu): “Local root exploit in kernel 2.6.17 - 2.6.24 (vmsplice)”
* Debian : #464953 - linux-2.6: mmap() local root exploit - Debian Bug report logs

Les patchs dans le noyau : splice: fix user pointer access in get_iovec_page_array() (2.6.24.2) et splice: missing user pointer access verification (CVE-2008-0009/10) (2.6.24.1).

Identifiants CVE : CVE-2008-0009 et CVE-2008-0010.

Commentaires: 0 | Buzz it!

Clef PGP Publique

Le besoin de sécuriser ses échanges sur internet s'amplifiant, je vous propose de trouver sur cette page:

http://ludovic.rivallain.fr//media/blog/billet12/pgp_pub.html

... ma clef PGP publique.

Elle vous permettra si vous êtes équipé d'un logiciel de mail compatible, de vérifier la provenance des mails à mon nom. Elle pourrait être aussi indispensable pour décripter certains messages cryptés par mes soins.

En ajoutant cette clef publique à vos clefs reconnues, vous n'aurez plus de doute sur l'expéditeur du mail ou d'un fichier.

Commentaires: 2 | Buzz it!