summaryrefslogtreecommitdiff
path: root/inc/mod
diff options
context:
space:
mode:
author8chan <admin@8chan.co>2014-12-24 06:08:19 -0800
committerczaks <marcin@6irc.net>2016-05-06 12:43:25 +0200
commit7a7574bdcace8ca5526ed10fe675cbbabced6ecd (patch)
treeaa386d707233e0b644fb39c61a42d7f9e7001cf3 /inc/mod
parent6da7f4d25aed8daf14f705e2acabbac8f755fe01 (diff)
SECURITY / XSS : ?/edit allowed arbitrary HTML to be added by any user thru addition of <tinyboard raw html>1</tinyboard>
This allowed ANY user with ?/edit privilege to also have raw_html regardless of whether they had $config['mod']['rawhtml'] Now, any changes to <tinyboard> markup modifiers via ?/edit are not allowed. They are removed at read time, and before write they are removed again and the ones in the database (which should be clean...) are inserted instead. Please immediately apply this patch to your instance if you are running any version of 8chan/infinity.
Diffstat (limited to 'inc/mod')
-rw-r--r--inc/mod/pages.php20
1 files changed, 17 insertions, 3 deletions
diff --git a/inc/mod/pages.php b/inc/mod/pages.php
index 8380cfd3..a90fbbd6 100644
--- a/inc/mod/pages.php
+++ b/inc/mod/pages.php
@@ -1473,6 +1473,15 @@ function mod_edit_post($board, $edit_raw_html, $postID) {
error($config['error']['404']);
if (isset($_POST['name'], $_POST['email'], $_POST['subject'], $_POST['body'])) {
+ // Remove any modifiers they may have put in
+ $_POST['body'] = remove_modifiers($_POST['body']);
+
+ // Add back modifiers in the original post
+ $modifiers = extract_modifiers($post['body_nomarkup']);
+ foreach ($modifiers as $key => $value) {
+ $_POST['body'] .= "<tinyboard $key>$value</tinyboard>";
+ }
+
if ($edit_raw_html)
$query = prepare(sprintf('UPDATE ``posts_%s`` SET `name` = :name, `email` = :email, `subject` = :subject, `body` = :body, `body_nomarkup` = :body_nomarkup WHERE `id` = :id', $board));
else
@@ -1501,15 +1510,20 @@ function mod_edit_post($board, $edit_raw_html, $postID) {
header('Location: ?/' . sprintf($config['board_path'], $board) . $config['dir']['res'] . link_for($post) . '#' . $postID, true, $config['redirect_http']);
} else {
+ // Remove modifiers
+ $post['body_nomarkup'] = remove_modifiers($post['body_nomarkup']);
+
+ $post['body_nomarkup'] = utf8tohtml($post['body_nomarkup']);
+ $post['body'] = utf8tohtml($post['body']);
if ($config['minify_html']) {
- $post['body_nomarkup'] = str_replace("\n", '&#010;', utf8tohtml($post['body_nomarkup']));
- $post['body'] = str_replace("\n", '&#010;', utf8tohtml($post['body']));
+ $post['body_nomarkup'] = str_replace("\n", '&#010;', $post['body_nomarkup']);
+ $post['body'] = str_replace("\n", '&#010;', $post['body']);
$post['body_nomarkup'] = str_replace("\r", '', $post['body_nomarkup']);
$post['body'] = str_replace("\r", '', $post['body']);
$post['body_nomarkup'] = str_replace("\t", '&#09;', $post['body_nomarkup']);
$post['body'] = str_replace("\t", '&#09;', $post['body']);
}
-
+
mod_page(_('Edit post'), 'mod/edit_post_form.html', array('token' => $security_token, 'board' => $board, 'raw' => $edit_raw_html, 'post' => $post));
}
}