Ce qui se passe
Datasette publie ce 11 septembre deux versions correctives : 0.65.4 pour la branche stable et 1.0a39 pour la série alpha. Les deux regroupent des correctifs de sécurité sur les permissions, la construction du SQL et le cache. Simon Willison est direct : si l'instance est exposée sur Internet et protège des données privées derrière un plugin d'authentification, il faut mettre à jour maintenant. Datasette Cloud est déjà corrigé.
Ce qui est corrigé
La plupart des trous ont le même profil : un chemin qui contournait la
permission view-table sur une instance mêlant tables publiques et privées.
- Les contrôles de permission tiennent compte de l'insensibilité à la casse des noms SQLite.
- Consulter un index de recherche plein texte exige le droit de lire la table d'origine.
- Les filtres
?_through=demandent l'accès à la table intermédiaire. - Les API de clés étrangères, les relations entrantes et leurs comptages,
l'affichage du schéma et les tables
sqlite_stat1àsqlite_stat4respectentview-table. - Les endpoints de ligne vérifient les droits avant de résoudre la clé primaire, pour ne pas révéler son existence.
- L'interface d'écriture SQL vérifie les tables citées dans un
CREATE VIEW, et l'API de création de table est mieux contrôlée. - Échappement corrigé des identifiants SQL et HTML issus de schémas non fiables ; les colonnes URL ne rendent un lien que pour du HTTP ou HTTPS validé.
- Les réponses privées ou personnalisées partent avec
Cache-Control: private, no-store; les réponses anonymes varient surCookieetAuthorization. - Le chargement d'extensions SQLite est coupé une fois celles de
--load-extensionchargées ; les acteurs restreints ne peuvent plus créer de jetons d'API.
Sur 1.0a39, db.execute_write() reçoit en plus une limite d'exécution par
défaut de 2 000 ms, indépendante de sql_time_limit_ms.
Comment ils les ont trouvés
Après des rapports assistés par IA de Sevban Dönmez, Simon Willison et Alex Garcia ont mené un audit complet avec trois modèles de frontière, puis se sont partagé chaque problème : l'un écrit le test automatisé qui le démontre, l'autre implémente le correctif, pour que deux humains aient relu chaque cas. Certains de ces tests restent hors du dépôt public le temps que les instances se mettent à jour.
À retenir
Mettre à jour, et sur toute base qui mélange tables publiques et privées,
s'assurer que la permission execute-sql reste désactivée.