Skip to content

Commit f684f3e

Browse files
committed
Code editor disable saving for php and tpl files to avoid php code injection from less privileged admin roles, vulnerability reported by @0xHamy
1 parent 739c6a6 commit f684f3e

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

admin/controller/editor/code.php

+13-4
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
use function Vvveb\sanitizeFileName;
2828

2929
class Code extends Base {
30+
protected $saveDenyExtensions = ['php', 'tpl'];
31+
3032
function dirForType($type) {
3133
switch ($type) {
3234
case 'public':
@@ -93,11 +95,18 @@ function save() {
9395

9496
$message = ['success' => false, 'message' => sprintf(__('Error saving: %s!'), $file)];
9597

96-
if (! is_writable($file)) {
97-
$message = ['success' => false, 'message' => sprintf(__('File not writable: %s Check if file has write permission.'), $file)];
98+
$extension = strtolower(substr($file, strrpos($file, '.') + 1));
99+
100+
if (in_array($extension, $this->saveDenyExtensions)) {
101+
$message = ['success' => false, 'message' => sprintf(__('Saving not allowed for file type %s!'), trim($extension, '.'))];
102+
$success = false;
98103
} else {
99-
if (file_put_contents($file, $content)) {
100-
$message = ['success' => true, 'message' => __('File saved!')];
104+
if (! is_writable($file)) {
105+
$message = ['success' => false, 'message' => sprintf(__('File not writable: %s Check if file has write permission.'), $file)];
106+
} else {
107+
if (file_put_contents($file, $content)) {
108+
$message = ['success' => true, 'message' => __('File saved!')];
109+
}
101110
}
102111
}
103112

0 commit comments

Comments
 (0)