Ceci est une ancienne révision du document !


Sécurité dans Dokuwiki

Cette page détaille comment sécuriser DokuWiki.

:!: Dernière mise à jour pour la version 2010-11-07.

Créer une section privée

Pour stocker des informations à caractère privé, il est possible de limiter l'accès à une page ou une section facilement :

  • Créer la page (ou une page dans la section)
  • Lorsque la page est affichée, cliquer Admin
  • Cliquer “Access Control List Management”
  • Ajouter la règle :
    • Choisir la page ou la section dans la liste déroulante
    • Indiquer Group “ALL”
    • Décocher tous les droits
    • Cliquer Save

La règle créée désactive l'accès à cette section, la recherche et les changement récents prennent en compte ce paramètre.

Il est ensuite possible d'ajouter des droits plus fin à quelques utilisateurs ou groupes.

Pour info, l'administrateur a toujours accès à toutes les pages.

:!: Afin de cacher les pages dans l'index, il faut activer l'option générale “sneaky_index”

Masquer l'existence des pages

Les messages indiquant si l'interdiction d'accès ou inexistante de la page sont différents, il est donc possible de savoir si la page existe.

Pour contourner ce problème, il suffit de mettre par défaut le site en “deny” et d'autoriser spécifiquement les pages publiques.

Failles de sécurité

Cette section recense les failles de sécurité que j'ai détectée lorsque des sections privées sont utilisées et fournit un correctif.

Démo

Démonstration des failles avec un wiki simple, configuré ainsi :

  • une page “start” avec des liens vers 3 pages
  • “valid” est une page existante et autorisée
  • une page nommée “hidden” existe mais n'est pas lisible
  • il n'existe pas de page nommée “empty” et cette requête est également interdite par les ACL
  • au niveau des ACL, mis à part “start” et “valid” tout est bloqué par des acls
  • l'option “useheading” est activée

Voici les screenshots :

Le détail des problèmes est décrit dans les paragraphes suivants.

Affichage du titre des sections privées

Même si le contenu d'une page est bloqué, il est malgré tout possible de connaitre son titre si l'option “use_heading” est activée.

Correctif : dokuwiki-2010-11-07_secu1.patch

:/opt/dokuwiki/inc# patch -p 1 < /root/dokuwiki-2010-11-07_secu1.patch
patching file parserutils.php
:/opt/dokuwiki/inc#

Le style utilisé dans youarehere indique si la page existe

Il est possible de distinguer si une page existe ou non en fonction du style utilisé dans “youarehere” (il s'agit du texte en haut à gauche en titre dans la page).

Correctif : dokuwiki-2010-11-07_secu2.patch

:/opt/dokuwiki/inc# patch -p 1 < /root/dokuwiki-2010-11-07_secu2.patch
patching file template.php
:/opt/dokuwiki/inc#

Le breadcrumb indique si la page existe

Le breadcrumb (ou piste en français) indique les pages visitées, permet de connaitre si une page existe (les pages inexistantes ne sont pas ajoutées).

Correctif : dokuwiki-2010-11-07_secu3.patch

:/opt/dokuwiki/inc# patch -p 1 < /root/dokuwiki-2010-11-07_secu3.patch
patching file common.php
:/opt/dokuwiki/inc#

Les liens vers les pages indiquent si une page existe et en indique le titre

Lorsqu'une page contient des liens vers d'autres pages, ceux-ci indiquent si la page existe même lorsque l'accès y est interdit.
De plus si useheading est activé, le titre de la page est également indiqué.

Correctif : dokuwiki-2010-11-07_secu4.patch

:/opt/dokuwiki/inc# patch -p 1 < /root/dokuwiki-2010-11-07_secu4.patch
patching file parser/xhtml.php
:/opt/dokuwiki/inc#

:!: Attention, les pages générées sont cachées par dokuwiki, un utilisateur peut donc voir les liens si la page cachée a été générée pour utilisateur qui dispose des autorisations pour ces liens.
Il faut donc éviter d'insérer dans des pages “publiques” des liens vers des pages “privées”.

Patchs pour les anciennes versions

2008-05-05

Patch pour la version 2008-05-05: doku_hide-2008-05-05.patch

wiki:/opt/wiki# patch -p 1 < /root/doku_hide.patch
patching file inc/common.php
patching file inc/parser/xhtml.php
patching file inc/parserutils.php
patching file inc/template.php
wiki:/opt/wiki#

2009-02-14

Patch pour la version 2009-02-14: dokuwiki-2009-02-14_security.patch

wiki:/opt/wiki/inc# patch -p 1 < /root/doku_hide.patch
patching file common.php
patching file parser/xhtml.php
patching file parserutils.php
patching file template.php
wiki:/opt/wiki/inc#

Patch de sécurité

Ce patch permet de masquer complètement les sections inaccessibles, par défaut même si il n'est pas possible de visualiser les pages, il possible de vérifier leur existence et leur titre.

wiki:/opt/wiki# patch -p 1 < /root/doku_hide.patch
patching file inc/common.php
patching file inc/parser/xhtml.php
patching file inc/parserutils.php
patching file inc/template.php
wiki:/opt/wiki#

Remarque : le contenu des pages est caché par défaut, l'affichage des liens d'une page dépend de la personne qui a déclenché la génération de la page.

Astuce : si les droits de lecture sont appliqués sur le wiki complet, alors l'utilisateur peut savoir si un répertoire existe ou non. Pour éviter cela, il suffit de n'autoriser en lecture que les répertoires autorisés.

Remarque 2 : ne pas oublier d'activer “sneaky_index” pour sécuriser l'index.

Détails des failles corrigées

  • inc/parser/xhtml.php : dans le contenu d'une page, les liens internes révèlent si la page existe à cause du style utilisé
  • inc/parserutils.php : lorsque useheading est à 1, les références vers une page interdite révèlent le nom de la page (dans le titre, dans youarehere et dans le contenu des pages)
  • inc/template.php : lorsque youarehere est activé, le style des éléments du chemin révèlent si ils existent
  • inc/common.php : breadcrumb - n'ajoute pas la page à la liste si l'accès est interdit
linux/dokuwiki/secu.1294267847.txt.gz · Dernière modification: 2011/01/05 23:50 par matthieu
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki