Compare commits

...

3 Commits

Author SHA1 Message Date
Ihor Radchenko eafa479069
Update version number for the 9.7.5 release 2024-06-22 17:53:19 +02:00
Ihor Radchenko e6de840889
etc/ORG-NEWS: Announce security fix
* etc/ORG-NEWS (Arbitrary shell commands are no longer run when
turning on Org mode):
2024-06-22 17:53:17 +02:00
Ihor Radchenko f4cc616369
org-link-expand-abbrev: Do not evaluate arbitrary unsafe Elisp code
* lisp/ol.el (org-link-expand-abbrev): Refuse expanding %(...) link
abbrevs that specify unsafe function.  Instead, display a warning, and
do not expand the abbrev.  Clear all the text properties from the
returned link, to avoid any potential vulnerabilities caused by
properties that may contain arbitrary Elisp.
2024-06-22 16:32:33 +02:00
3 changed files with 33 additions and 12 deletions

View File

@ -18,6 +18,9 @@ Please send Org bug reports to mailto:emacs-orgmode@gnu.org.
# Here, we list the *most important* changes and changes that _likely_
# require user action for most Org mode users.
# Sorted from most important to least important.
*** Arbitrary shell commands may no longer run when turning on Org mode
This is for security reasons, to avoid running malicious commands.
*** =python-mode.el (MELPA)= support in =ob-python.el= is removed

View File

@ -1152,17 +1152,35 @@ Abbreviations are defined in `org-link-abbrev-alist'."
(if (not as)
link
(setq rpl (cdr as))
(cond
((symbolp rpl) (funcall rpl tag))
((string-match "%(\\([^)]+\\))" rpl)
(replace-match
(save-match-data
(funcall (intern-soft (match-string 1 rpl)) tag))
t t rpl))
((string-match "%s" rpl) (replace-match (or tag "") t t rpl))
((string-match "%h" rpl)
(replace-match (url-hexify-string (or tag "")) t t rpl))
(t (concat rpl tag)))))))
;; Drop any potentially dangerous text properties like
;; `modification-hooks' that may be used as an attack vector.
(substring-no-properties
(cond
((symbolp rpl) (funcall rpl tag))
((string-match "%(\\([^)]+\\))" rpl)
(let ((rpl-fun-symbol (intern-soft (match-string 1 rpl))))
;; Using `unsafep-function' is not quite enough because
;; Emacs considers functions like `genenv' safe, while
;; they can potentially be used to expose private system
;; data to attacker if abbreviated link is clicked.
(if (or (eq t (get rpl-fun-symbol 'org-link-abbrev-safe))
(eq t (get rpl-fun-symbol 'pure)))
(replace-match
(save-match-data
(funcall (intern-soft (match-string 1 rpl)) tag))
t t rpl)
(org-display-warning
(format "Disabling unsafe link abbrev: %s
You may mark function safe via (put '%s 'org-link-abbrev-safe t)"
rpl (match-string 1 rpl)))
(setq org-link-abbrev-alist-local (delete as org-link-abbrev-alist-local)
org-link-abbrev-alist (delete as org-link-abbrev-alist))
link
)))
((string-match "%s" rpl) (replace-match (or tag "") t t rpl))
((string-match "%h" rpl)
(replace-match (url-hexify-string (or tag "")) t t rpl))
(t (concat rpl tag))))))))
(defun org-link-open (link &optional arg)
"Open a link object LINK.

View File

@ -9,7 +9,7 @@
;; URL: https://orgmode.org
;; Package-Requires: ((emacs "26.1"))
;; Version: 9.7.4
;; Version: 9.7.5
;; This file is part of GNU Emacs.
;;