Visite au tribunal pour une injection SQL
(sockpuppet.org)- Le large principe de transparence de l’Illinois FOIA a été mis à l’épreuve face aux schémas de bases de données des organismes publics, et une demande portant sur la base de données des contraventions de stationnement Chicago CANVAS a débouché sur un procès et des discussions législatives
- Le FOIA garantit fortement l’accès aux informations existantes, mais ne peut pas imposer la création de nouveaux documents ; plus les données se trouvent dans des applications, plus le schéma, qui indique quelles requêtes demander, devient important
- Chicago a soutenu que le schéma CANVAS menaçait la sécurité, et le point central du procès était de savoir si sa divulgation rendrait réellement possible, ou faciliterait, une attaque par injection SQL
- En première instance et en appel, le camp de la divulgation a gagné, mais l’Illinois Supreme Court a considéré le file layout comme une catégorie exemptée en soi et a jugé qu’un schéma SQL en relevait également
- Aujourd’hui, les organismes publics de l’Illinois peuvent refuser de divulguer les schémas de bases de données ; le SB0226 vise à les obliger à fournir une description de la structure des bases de données afin que les demandeurs puissent solliciter des requêtes de base de données précises
Le problème rencontré par l’Illinois FOIA face aux bases de données
- L’Illinois FOIA traite en principe les informations collectées par les organismes publics comme un bien public, avec des exceptions limitées
- Les demandeurs ne se voient généralement pas facturer de frais
- Les organismes publics ne peuvent pas facilement limiter le nombre de demandes
- Le délai de réponse est de 5 jours par défaut, avec 5 jours supplémentaires en cas de demande écrite de prolongation
- En cas de procès contre un refus injustifié, il est possible de récupérer les frais d’avocat
- Une limite majeure est que le FOIA ne peut pas obliger un organisme public à créer un nouveau document
- Si le rapport souhaité existe déjà, il peut être demandé
- S’il n’existe pas, il faut demander les données brutes et les assembler soi-même
- À mesure que les informations des organismes publics se trouvent davantage dans des applications et bases de données spécialisées que dans des classeurs, des disques partagés ou des documents Word, la valeur des schémas augmente
- Un schéma de base de données est une structure qui contient les noms de plusieurs tables et les noms des colonnes de chaque table
- Dans l’article, il est comparé à un fichier Excel comportant plusieurs onglets
- Le nom de chaque onglet et la ligne d’en-tête de chacun correspondent au schéma
La demande de Matt Chapman concernant le schéma CANVAS
- Matt Chapman est présenté comme un civic hacker qui fait du data journalisme en s’appuyant sur de nombreuses demandes FOIA
- En travaillant sur les données des contraventions de stationnement de Chicago, un système appelé CANVAS est apparu
- CANVAS est le dépôt central qui contient toutes les données de contraventions de stationnement de Chicago
- Matt Chapman a demandé le schéma de la base de données CANVAS via le FOIA afin de comprendre ce qu’elle contenait
- Chicago a refusé la demande en invoquant une exception de l’Illinois FOIA liée au traitement automatisé des données
- Cette disposition inclut les logiciels, les protocoles opérationnels, les descriptions de programmes, les file layouts, les listes de sources, les modules, les guides utilisateur, les documents de conception logique et physique, les manuels du personnel, etc.
- Les informations susceptibles de menacer la sécurité des systèmes ou des données en cas de divulgation sont également énumérées parmi les exceptions
- Chicago a qualifié Matt Chapman de « hacker » et soutenu que le schéma CANVAS pourrait représenter un risque pour la ville s’il tombait entre de mauvaises mains
Le point technique central au tribunal : l’injection SQL
- La question centrale du procès était de savoir si la divulgation du schéma CANVAS rendrait possible une attaque par injection SQL
- SQL est un langage utilisé par de nombreux programmes pour dialoguer avec des bases de données, et l’injection SQL est une faille de sécurité qui peut apparaître dans les programmes utilisant SQL
- Une injection SQL se produit quand une entrée utilisateur est mal insérée dans un modèle de requête SQL au sein du code applicatif
- Par exemple, dans une requête où le nom est entouré de guillemets, une entrée contenant une apostrophe comme
Bob O’Connorpeut perturber l’interprétation par la base de données - Un attaquant peut exploiter ce type de point d’entrée pour faire exécuter le reste de l’entrée comme du code
- Par exemple, dans une requête où le nom est entouré de guillemets, une entrée contenant une apostrophe comme
- Bruce Coffing, CISO de Chicago, a affirmé que la divulgation du schéma aiderait les attaquants de trois façons
- Elle leur permettrait de trouver des vulnérabilités
- Elle rendrait la recherche de vulnérabilités plus discrète
- Elle les aiderait à choisir les applications qui valent le plus la peine d’être attaquées
- L’argument inverse insistait sur le fait que le schéma n’est pas l’endroit où l’on trouve les vulnérabilités d’injection SQL
- Les vulnérabilités d’injection SQL se trouvent dans les modèles de requêtes SQL du code source applicatif, pas dans le schéma de la base de données
- La demande visait le schéma, proche des lignes d’en-tête des tables, et non le code source
- Un attaquant peut récupérer le schéma par injection SQL ; le schéma ressemble davantage au résultat de l’attaque qu’à son préalable
Les décisions en première instance et en appel
- En première instance, Matt Chapman a gagné
- Chicago a immédiatement fait appel, et Matt Chapman n’a pas reçu le schéma CANVAS
- La cour d’appel a traité les questions de droit en partant du principe que le tribunal de première instance était le principal juge des faits
- Le critère « would jeopardize » concernant le risque lié à la divulgation est devenu un point de débat
- « could » renvoie à un niveau où l’on peut imaginer qu’un événement puisse se produire
- Le critère juridique de « would » est décrit comme exigeant des preuves claires d’un préjudice ne laissant pas de doute raisonnable au juge
- La cour d’appel a retenu une approche selon laquelle la probabilité de préjudice devait être très élevée
- La cour d’appel s’est penchée sur la question de savoir si la clause restrictive de l’exception ne s’appliquait qu’à « any other information » ou à l’ensemble des « Administrative or technical information » de l’exception
- Si elle ne s’applique qu’à « any other information », les file layouts et autres éléments sont exemptés en eux-mêmes
- Si elle s’applique à toute l’exception, une simple constatation factuelle selon laquelle la divulgation ne menace pas la sécurité suffit à faire gagner Matt Chapman
- La cour d’appel a estimé que la clause restrictive s’appliquait à toute l’exception et a donné raison à Matt Chapman
Une conclusion renversée par l’Illinois Supreme Court
- Chicago a de nouveau fait appel, et l’affaire est arrivée devant l’Illinois Supreme Court
- L’Illinois Supreme Court a interprété l’exception du FOIA différemment de la cour d’appel
- La clause restrictive ne s’applique qu’à « any other information »
- Les autres éléments sont exemptés en eux-mêmes
- Avec cette décision, la question décisive est devenue de savoir si un schéma SQL est un file layout
- Un contre-argument a été avancé : schéma et file layout sont techniquement différents
- Un même schéma SQL peut être utilisé par plusieurs moteurs de bases de données
- Chaque moteur de base de données gère les données résultantes avec un underlying file layout différent
- Le McGraw-Hill Dictionary of Scientific & Technical Terms, 6E définit un file layout comme une « description de l’agencement des données dans un fichier »
- Un schéma SQL est plutôt une abstraction conçue pour éviter d’avoir à penser à l’agencement réel des données
- L’Illinois Supreme Court a également utilisé la définition de schema du Merriam-Webster Online Dictionary : « structured framework or plan: outline »
- La cour a jugé que la différence n’était qu’une question de nom
- En conséquence, le schéma a été traité comme un file layout, et Matt Chapman a perdu
Situation actuelle et SB0226
- Aujourd’hui, les organismes publics de l’Illinois peuvent refuser la divulgation des schémas de bases de données
- À mesure que les données migrent vers des applications spécialisées, il devient de plus en plus nécessaire de demander, via le FOIA, l’exécution de requêtes de base de données pour accéder aux données de base
- Il reste un problème : les bases de données ne devraient pas devenir une zone refuge permettant aux collectivités locales d’échapper à la transparence des informations publiques
- SB0226 vise à ajouter au FOIA une formulation obligeant les organismes publics à fournir une description suffisante de la structure de toutes les bases de données qu’ils administrent
- L’objectif est de permettre aux demandeurs de solliciter auprès des organismes publics l’exécution de requêtes de base de données précises
- Ce projet de loi s’inscrit largement dans la continuité du travail de Matt Chapman, qui n’a cessé de soulever ce problème
1 commentaires
Avis sur Hacker News
Je suis le plaignant dans cette affaire. Je suis encore en train de rédiger un billet compagnon à celui de tptacek, qui devrait être prêt bientôt ; en attendant, vous pouvez poser vos questions ici.
Pendant que vous attendez, vous pouvez aussi consulter cet ancien billet : https://mchap.io/that-time-the-city-of-seattle-accidentally-...
Cela dit, il faut garder à l’esprit que Matt, même avec le soutien de Loevy and Loevy, l’un des meilleurs cabinets d’avocats spécialisés dans les droits civiques du pays, a techniquement perdu. Cela montre à quel point il est absurdement difficile de se battre contre une mairie, et c’est encore pire sans avocat.
Ce qui jouerait en notre faveur, comme le suggère l’article, c’est de changer la loi. Une fois que la Cour suprême de l’État a rendu sa décision, sans amendement, c’est fini ; et l’Illinois a l’habitude de modifier fréquemment sa loi FOIA. Cela dit, certaines de ces modifications sont allées non pas vers davantage de transparence, mais vers un renforcement de la non-divulgation des informations.
Un autre changement nécessaire serait d’imposer de lourdes sanctions aux organismes qui perdent ce type de bataille. Dans l’Illinois, cela se limite à une amende civile de 5 000 dollars contre l’organisme. La notion même d’amende civile est définie de manière assez floue ; auparavant, elle était versée au plaignant, mais dans des affaires que j’ai menées plus tard, on s’est contenté de faire verser l’argent au comté. Comme l’a dit un procureur d’État : « Peu m’importe de perdre, je n’ai qu’à me faire un chèque à moi-même. »
Enfin, il faut faire attention à ce que l’on demande dans un procès. Une décision d’appel comme celle-ci peut venir figer dans le droit précisément ce contre quoi je me battais. Ce n’est la faute de personne, mais cela arrive vraiment. J’ai moi-même obtenu une décision aberrante qui, au lieu de renforcer les droits des détenus, les a supprimés.
'); SELECT col FROM loginsque de devoir deviner les noms de colonnes ?Je ne vois pas non plus très bien comment contester le raisonnement du tribunal sur le schéma et l’organisation des fichiers. Le schéma n’est pas exactement l’organisation des fichiers elle-même, mais il y ressemble : il indique comment les « fichiers » (enregistrements) sont disposés dans le « système de fichiers » (tables de base de données). Par exemple, la dénormalisation ressemble beaucoup au fait de mettre des données inline dans des enregistrements de fichiers. L’idée qu’un système de fichiers est en réalité une base de données est aussi bien connue. Je me demande comment on peut soutenir que les deux ne sont pas analogues.
Je me demande quelle est, selon vous, la prochaine étape.
Je pense que la ville devrait partager le schéma et qu’elle invoque en pratique la sécurité par l’obscurité, mais je ne suis pas d’accord avec la prémisse centrale de l’article selon laquelle « connaître le schéma SQL n’aide pas un attaquant ».
J’ai compris l’argument ainsi : « Les attaquants récupèrent le schéma SQL au moyen d’attaques par injection SQL. Le schéma n’est pas un préalable à l’attaque, c’en est le produit. » Cela semble vouloir dire que si l’on trouve une vulnérabilité, on peut de toute façon récupérer le schéma, mais ce n’est pas toujours le cas. Certaines injections SQL ne permettent de récupérer qu’une partie des données de la table actuellement interrogée, sans accès à d’autres tables comme
information_schema. Si les seuls signaux fournis par la vulnérabilité sont « échec de la requête » ou « réussite de la requête, données renvoyées », connaître le schéma rend l’exploitation beaucoup plus facile.Si les requêtes de base de données échouées sont journalisées séparément, il est probable que les injections qu’une attaque tournant 24 h/24 peut trouver aient déjà été corrigées. Les logs peuvent alors rester relativement calmes jusqu’à ce qu’un véritable point d’injection soit découvert, par exemple une faille accessible uniquement aux utilisateurs connectés et donc introuvable par les bots ; à ce moment-là, on a peut-être le temps de la voir et de la corriger avant que l’attaquant ne trouve réellement comment l’exploiter.
Connaître le schéma accélère non seulement l’exploitation d’une vulnérabilité, mais augmente aussi la probabilité d’explorer l’injection dès le départ sans provoquer d’échecs de requête.
Le critère ne devrait pas être « censurer toute information utile », mais « ne pas divulguer de code révélant des mots de passe ou des backdoors ». Un schéma ne peut pas entrer dans cette catégorie.
Cela dit, j’ai déjà travaillé sur des applications où connaître le schéma aidait à exfiltrer des données même sans injection complète. L’exemple le plus évident est celui d’une requête construite à partir de paramètres d’URL sans que ces paramètres soient limités par une liste d’autorisation.
Je suis donc d’accord pour dire que le schéma peut donner un léger avantage à un attaquant.
https://brutecat.com/articles/leaking-youtube-emails
Je pense donc que cet argument ne tient pas.
Rien dans les logs du serveur n’indiquait une erreur.
Même les exercices d’injection SQL plutôt introductifs que j’enseignais se faisaient pour la plupart sans connaître le schéma. C’est pour cela que l’injection SQL est si sournoise et dangereuse.
Kurt a posté ça pour me troller. Il faut savoir que le lectorat visé à l’origine était surtout composé de non-techniciens impliqués dans la politique municipale de ma région, Chicagoland.
Pour faire un peu de sensibilisation civique à la politique locale : s’impliquer dans la politique nationale, c’est aussi sombre et démoralisant que d’être un moucheron qui s’écrase contre la vitre d’un gratte-ciel. En revanche, la politique locale est extrêmement réactive. Avec mon temps libre et quasiment aucun budget, j’ai obtenu de vrais résultats, et j’ai même contribué à faire adopter une loi. C’est radicalement différent de la politique nationale.
Ce qui est surprenant dans beaucoup d’endroits, c’est que la politique locale tourne autour de forums de discussion. Ce ne sont peut-être pas les forums où vous avez envie d’être, et il y a notamment beaucoup de groupes Facebook, mais il faut faire avec. Si vous aimez participer à des communautés comme HN, vous pouvez aussi participer à la politique, et une simple activité sur des forums peut suffire à faire avancer les choses.
En fait, même aux États-Unis, c’est souvent le cas. Seules les collectivités locales disposant du pouvoir de home rule peuvent adopter des ordonnances sur n’importe quel sujet tant qu’elles n’entrent pas en conflit avec le droit de l’État ou le droit fédéral ; les autres ne peuvent légiférer que sur les sujets spécifiques autorisés par le parlement de l’État. Certains États accordent le home rule à tous les comtés et municipalités, d’autres à aucun, et d’autres seulement à certains. Par exemple, au Texas, une municipalité peut obtenir le pouvoir de home rule lorsqu’elle atteint 5 000 habitants et que les électeurs l’approuvent.
Je serais aussi curieux de savoir si tu peux partager de bonnes ressources, sur Facebook ou ailleurs, pour quelqu’un qui voudrait s’impliquer davantage dans la politique de Chicago. J’ai déjà cherché, mais avec des résultats très limités.
N’est-il pas absurde que la Cour suprême et la cour d’appel se soient divisées sur une question de structure de phrase ? Même si c’est courant, interpréter le texte comme « tous les emplacements de fichiers et autres éléments sont concernés, mais seulement les mauvais autres éléments », personnellement, je trouve ça insensé. Je trouve étrange que l’on accepte que le libellé d’une loi reste complètement ambigu.
Je sais bien que ce genre d’ambiguïté arrange les tribunaux, qui y gagnent une marge d’appréciation, et que malgré de vaillantes tentatives, on ne peut pas transformer le langage juridique en une langue « formellement complète ». Je sais que le droit est un bazar, et que les lois sont écrites par des humains naïfs et faillibles.
Mais si la structure grammaticale de base inscrite dans la loi n’est même pas claire pour les tribunaux, tout le système n’échoue-t-il pas dès la première étape ?
La réponse habituelle est qu’il faudrait écrire les lois sans ambiguïté, mais c’est plus facile à dire qu’à faire. De plus, les législateurs eux-mêmes ne parviennent pas toujours à un accord complet, et laissent parfois volontairement certains passages ambigus pour que les tribunaux les interprètent.
Suis-je le seul à trouver un peu déconcertant et inquiétant que l’exception pour le code source ait été intégrée aussi directement ?
On peut facilement imaginer un scénario où une ville développe en interne un logiciel donné et cache dans le code source des « biais » ou d’autres éléments qu’elle ne voudrait pas voir exposés.
Il n’est même pas nécessaire de tout créer à partir de zéro. Il suffit de patcher et d’utiliser un composant tiers sous licence permissive.
À mon avis, l’amendement proposé ne va pas assez loin.
C’est le même problème que rencontrent les gens qui essaient de convertir un projet fermé en open source. Du code propriétaire pour lequel les développeurs et les clients ont seulement le droit d’utilisation, mais pas le droit de partager les sources, est verrouillé un peu partout.
Même un projet conçu dès le départ avec une forte orientation open, sans intérêts commerciaux directs comme ceux d’un contractant public, peut rencontrer ce problème. Les problèmes auxquels le noyau Linux est confronté lorsqu’il prend en charge ZFS ou des pilotes sous forme de blobs binaires dans l’espace noyau/utilisateur sont bien connus[1].
Paradoxalement, d’un côté, l’information veut être libre, et économiquement, les logiciels open source finiront avec le temps par évincer leurs concurrents fermés. Mais le passage d’un projet en open source est lui-même coûteux, parfois au point d’être impossible à assumer, ce qui empêche de publier d’anciens outils même lorsque les mainteneurs et les entreprises le souhaitent. Le simple fait d’impliquer l’équipe juridique et d’identifier les ayants droit de chaque composant suffit à faire renoncer la plupart des mainteneurs.
Si l’État exigeait dans ses contrats que les fournisseurs n’utilisent que des composants open source dans tout l’arbre des dépendances, les coûts pourraient devenir très élevés. Beaucoup de dépendances n’ont pas d’équivalent open source comparable, ou bien les alternatives fermées disposent de fonctionnalités manquantes qu’il faudrait financer. À court terme, aucun conseil n’accepterait ces coûts supplémentaires, mais à long terme, le public y gagnerait.
[1] Il est vrai que les problèmes du noyau sont en grande partie une fonction de la GPL. Avec des licences plus permissives comme Apache 2 ou MIT, ces problèmes n’auraient pas existé, et les systèmes de la famille BSD n’ont pas eu de difficulté à prendre en charge ZFS. Cela dit, l’idée selon laquelle les applications publiques devraient par principe être open source est, du point de vue des licences, plus proche de la GPL que de MIT. Sinon, un fournisseur pourrait mettre les parties réellement importantes dans du code blob binaire « vendorisé » et ne laisser dans les composants publics qu’un squelette sans intérêt pour satisfaire aux exigences.
Cela dit, une telle décision de justice peut avoir un effet dissuasif.
Si je me souviens bien, l’ancienne coalition allemande, aujourd’hui disparue, l’avait inscrit dans son programme, mais ne l’a pas mis en œuvre. Le nouveau gouvernement le fera peut-être.
Article très intéressant
Considérer la divulgation du schéma comme quelque chose à protéger paraît absurde. Si l’on suit l’explication donnée, on arrive à un résultat presque magique du genre : « c’est dans la base de données, donc on ne peut rien savoir, et si l’on ne peut pas dire comment le trouver, c’est fichu »
Travaillant dans une petite entreprise avec beaucoup de clients, je ne voudrais pas non plus fournir tel quel le schéma de la base de données, mais nous faisons quand même des efforts pour trouver et fournir les données que veulent les clients ; nous ne refusons pas
Pour le projet cleartap.com, j’ai demandé via la FOIA plus d’un million de pages de documentation sur les bases de données américaines de qualité de l’eau
La plupart des États n’ont facturé qu’une petite somme pour rassembler les documents
Le Michigan a demandé 50 000 dollars pour la requête FOIA. Je pense que c’était à cause de la crise de contamination au plomb de Flint. Ils voulaient probablement me faire renoncer
Le projet est excellent
« Récupère toutes les données de contraventions de stationnement émises à Bob O, ainsi que toutes les autres informations de la base de données et les mots de passe de tout le monde. »
C’est un exemple d’injection SQL écrit en anglais courant, mais ici aussi, « everyone's » pose problème parce qu’il introduit une apostrophe orpheline. Si « Bob O'Conner » est problématique, alors « everyone's » l’est aussi
« Le code source des programmes qu’ils exécutent ne peut généralement pas non plus être demandé via la FOIA. »
Malheureusement, je pense que cette partie devrait être illégale au regard de la FOIA
Le code source devrait être open source et vérifiable. S’il devient une exception à la FOIA, cela contourne la confiance du public dans l’usage des logiciels par l’État
Je me demande où et comment les tribunaux ont déjà tranché ce type de question
Il peut aussi exister une logique métier que les administrations veulent réellement garder secrète et qu’elles ont légalement le droit de protéger. Dans le cas de la base de données de contraventions de stationnement de l’article original, le code source du logiciel qui communique avec cette base pourrait contenir la logique déterminant quand et où les agents de stationnement mèneront des opérations de contrôle intensif « aléatoires »
C’est ce genre de choses qui m’a fait renoncer à faire du droit. Une grande partie des procès ressemble à du théâtre kabuki : non pas une rhétorique destinée à parvenir à un résultat juste ou logique, mais une rhétorique qui sert à fournir à une personne en position d’autorité le prétexte pour prendre une décision qu’elle voulait déjà prendre avant même le procès
Quelqu’un peut parfaitement mettre en place légalement un système ressemblant à un pare-feu web qui recherche dans les requêtes HTTP des mots-clés comme
information_schemaet leurs variantes encodées. Comme il s’agit toujours de tentatives de piratage, cela peut être bloqué. Si l’on connaît déjà le schéma, on peut construire la requête sans avoir à contourner d’abord cette contrainte. Est-il très probable que ce soit un obstacle sérieux ? Non. Est-ce lié à l’égocentrisme ? Je ne vois pas en quoiDire que cela a une valeur minime, simplement au sens de « périphérique », c’est-à-dire non central et pas assez important pour mériter discussion, me paraît exact. Mais lorsqu’on ne dit que la vérité, la partie adverse peut l’amplifier et tenter de convaincre le tribunal : « voyez, même leur expert reconnaît qu’il y a une valeur ». L’expert en conclut donc qu’il aurait simplement dû dire « cela n’a aucune valeur ». Je pense que cette phrase est fausse, mais elle est fausse de manière tellement minime qu’il est difficile de prouver que l’autre partie n’a pas entièrement raison. Au final, une formulation moins exacte devient plus avantageuse dans ce tribunal, et la rhétorique compte autant que le rôle d’expert