diff --git a/.gitignore b/.gitignore index 4e78ae3..5bd49e5 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ nbproject/ *.swp *.kdev4 .kdev4/* +.idea/ # Ignore ALL config files conf.php diff --git a/.horde.yml b/.horde.yml index f41fc24..be7b61d 100644 --- a/.horde.yml +++ b/.horde.yml @@ -7,6 +7,12 @@ list: dev type: library homepage: https://www.horde.org/libraries/Horde_Mime_Viewer authors: + - + name: Jan Schneider + user: yunosh + email: jan@horde.org + active: true + role: lead - name: Michael Slusarz user: slusarz @@ -39,3 +45,7 @@ dependencies: optional: pear: pear.php.net/Net_DNS2: '*' + ext: + dom: '*' + libxml: '*' + xsl: '*' diff --git a/composer.json b/composer.json index 1e5139a..bd0d81f 100644 --- a/composer.json +++ b/composer.json @@ -5,6 +5,11 @@ "homepage": "https://www.horde.org/libraries/Horde_Mime_Viewer", "license": "LGPL-2.1", "authors": [ + { + "name": "Jan Schneider", + "email": "jan@horde.org", + "role": "lead" + }, { "name": "Michael Slusarz", "email": "slusarz@horde.org", @@ -12,7 +17,7 @@ } ], "version": "2.2.3", - "time": "2017-11-14", + "time": "2022-03-01", "repositories": [ { "type": "pear", @@ -32,7 +37,10 @@ "ext-xml": "*" }, "suggest": { - "pear-pear.php.net/Net_DNS2": "*" + "pear-pear.php.net/Net_DNS2": "*", + "ext-dom": "*", + "ext-libxml": "*", + "ext-xsl": "*" }, "replace": { "pear-pear.horde.org/Horde_Mime_Viewer": "2.*", @@ -43,4 +51,4 @@ "Horde_Mime_Viewer": "lib/" } } -} +} \ No newline at end of file diff --git a/doc/Horde/Mime/Viewer/changelog.yml b/doc/Horde/Mime/Viewer/changelog.yml index 0604f46..75f571d 100644 --- a/doc/Horde/Mime/Viewer/changelog.yml +++ b/doc/Horde/Mime/Viewer/changelog.yml @@ -8,7 +8,8 @@ license: identifier: LGPL-2.1 uri: http://www.horde.org/licenses/lgpl21 - notes: + notes: | + [jan] Fix XSS vulnerability in Open Document mime viewer (Reported by: Simon Scannell, SonarSource ). 2.2.2: api: 2.1.0 state: diff --git a/lib/Horde/Mime/Viewer/Ooo.php b/lib/Horde/Mime/Viewer/Ooo.php index 4e56e95..2c11120 100644 --- a/lib/Horde/Mime/Viewer/Ooo.php +++ b/lib/Horde/Mime/Viewer/Ooo.php @@ -123,7 +123,9 @@ protected function _render() $xml = new DOMDocument(); $xml->load(realpath($tmpdir . 'content.xml')); $result = $xslt->transformToXml($xml); - if (!$result) { + if ($result) { + $result = Horde_Text_Filter::filter($result, 'xss'); + } else { $result = libxml_get_last_error()->message; } diff --git a/package.xml b/package.xml index deb3ffc..577abc7 100644 --- a/package.xml +++ b/package.xml @@ -3,14 +3,20 @@ Horde_Mime_Viewer pear.horde.org MIME viewer library - Provides rendering drivers for MIME data. + A library that provides rendering drivers for MIME data. + + Jan Schneider + yunosh + jan@horde.org + yes + Michael Slusarz slusarz slusarz@horde.org no - 2017-11-14 + 2022-03-01 2.2.3 2.1.0 @@ -410,7 +416,10 @@ - + + + + @@ -492,6 +501,15 @@ Net_DNS2 pear.php.net + + dom + + + libxml + + + xsl + @@ -674,7 +692,10 @@ - + + + + @@ -1130,7 +1151,7 @@ stable stable - 2017-11-14 + 2022-03-01 LGPL-2.1 * diff --git a/test/Horde/Mime/Viewer/AllTests.php b/test/Horde/Mime/Viewer/AllTests.php new file mode 100644 index 0000000..49583c8 --- /dev/null +++ b/test/Horde/Mime/Viewer/AllTests.php @@ -0,0 +1,3 @@ +run(); diff --git a/test/Horde/Mime/Viewer/OooTest.php b/test/Horde/Mime/Viewer/OooTest.php new file mode 100644 index 0000000..ab02ce2 --- /dev/null +++ b/test/Horde/Mime/Viewer/OooTest.php @@ -0,0 +1,40 @@ + + * @category Horde + * @copyright 2022 Horde LLC + * @internal + * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1 + * @package Mime + * @subpackage UnitTests + */ +class Horde_Mime_MimeTest extends \PHPUnit\Framework\TestCase +{ + + public function testXssVulnerability() + { + $mimePart = new Horde_Mime_Part(); + $mimePart->setContents(file_get_contents(__DIR__ . '/xss.odt')); + $viewer = new Horde_Mime_Viewer_Ooo( + $mimePart, + array('zip' => new Horde_Compress_Zip()) + ); + $html = current(@$viewer->render('full')); + + $this->assertNotContains("", $html['data']); + $this->assertNotContains("javascript:alert('xss')", $html['data']); + } + +} diff --git a/test/Horde/Mime/Viewer/bootstrap.php b/test/Horde/Mime/Viewer/bootstrap.php new file mode 100644 index 0000000..4e19e93 --- /dev/null +++ b/test/Horde/Mime/Viewer/bootstrap.php @@ -0,0 +1,3 @@ + array( - 'name' => 'www.example.com', - 'port' => 80 - ), - 'use_ssl' => 0 -); -$registry = new Registry(); -$browser = new Browser(); - -$tests = array( - 'link', - 'link', - 'link', - 'link', - 'link', - 'link', - 'link' -); - -foreach ($tests as $val) { - $part = new Horde_Mime_Part(); - $part->setType('text/html'); - $part->setContents($val); - $viewer = Horde_Mime_Viewer::factory($part, 'text/html'); - echo $viewer->render(); -} - -?> ---EXPECT-- -link -link -link -link -link -link -link diff --git a/test/Horde/Mime/Viewer/xss.odt b/test/Horde/Mime/Viewer/xss.odt new file mode 100644 index 0000000..7faf19b Binary files /dev/null and b/test/Horde/Mime/Viewer/xss.odt differ