emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [ANN] Emergency bugfix release: Org mode 9.7.5
@ 2024-06-22 16:10 Ihor Radchenko
  2024-06-22 17:49 ` Ihor Radchenko
                   ` (4 more replies)
  0 siblings, 5 replies; 20+ messages in thread
From: Ihor Radchenko @ 2024-06-22 16:10 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: Bastien

Dear all,

I just released Org mode 9.7.5 that fixes a critical vulnerability.
The release is coordinated with emergency Emacs 29.4 release.

Please upgrade your Org mode *and* Emacs ASAP.

The vulnerability involves arbitrary Shell code evaluation when
previewing attachments in Emacs MUA (gnus-based: at least, mu4e,
Notmuch, Gnus itself) or when opening third-party Org files. All the
earlier versions of Org mode are affected.

Note that the vulnerability solved in this release has nothing to do
with recent Org 9.6.23 release
(https://list.orgmode.org/871q7zbldp.fsf@localhost/). It existed since
long time ago and was discovered by accident.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [ANN] Emergency bugfix release: Org mode 9.7.5
  2024-06-22 16:10 [ANN] Emergency bugfix release: Org mode 9.7.5 Ihor Radchenko
@ 2024-06-22 17:49 ` Ihor Radchenko
  2024-06-22 23:55   ` Greg Troxel
  2024-06-22 17:59 ` emacs-orgmode
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 20+ messages in thread
From: Ihor Radchenko @ 2024-06-22 17:49 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: Bastien

Ihor Radchenko <yantar92@posteo.net> writes:

> Please upgrade your Org mode *and* Emacs ASAP.

*Org mode or Emacs.

The fix is purely in Org code, so upgrading Emacs is only needed when
you want to use built-in Org mode.

Otherwise, it is enough to upgrade Org mode via ELPA (the tarball will
be available soon, after ELPA scripts fetch the latest release tag).

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [ANN] Emergency bugfix release: Org mode 9.7.5
  2024-06-22 16:10 [ANN] Emergency bugfix release: Org mode 9.7.5 Ihor Radchenko
  2024-06-22 17:49 ` Ihor Radchenko
@ 2024-06-22 17:59 ` emacs-orgmode
  2024-06-22 19:15   ` Ihor Radchenko
  2024-06-24  8:08 ` [ANN] Emergency bugfix release: Org mode 9.7.5 Bastien Guerry
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 20+ messages in thread
From: emacs-orgmode @ 2024-06-22 17:59 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode, Bastien


Ihor Radchenko <yantar92@posteo.net> writes:

> I just released Org mode 9.7.5 that fixes a critical vulnerability.
> The release is coordinated with emergency Emacs 29.4 release.

Thanks for the release and the anouncement.

Will a CVE be released? I am interested if there are mitigating factors
such as using `emacs -nw` (without GUI), thus no possible preview of the
attachments (IIUC).

Best,


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [ANN] Emergency bugfix release: Org mode 9.7.5
  2024-06-22 17:59 ` emacs-orgmode
@ 2024-06-22 19:15   ` Ihor Radchenko
  2024-06-24  9:09     ` Assigned: CVE-2024-39331 (was: [ANN] Emergency bugfix release: Org mode 9.7.5) Ihor Radchenko
  0 siblings, 1 reply; 20+ messages in thread
From: Ihor Radchenko @ 2024-06-22 19:15 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: emacs-orgmode, Bastien

emacs-orgmode@city17.xyz writes:

> Will a CVE be released?

Should be, I think.
If nobody reports it independently by tomorrow, I will look into how to
request a CVE number myself.

> ... I am interested if there are mitigating factors
> such as using `emacs -nw` (without GUI), thus no possible preview of the
> attachments (IIUC).

AFAIK, previewing attachments is not disabled by "no GUI" - preview in
this context simply means fontification using major mode of the attached
files.

To disable email previews, see `mm-inline-media-tests'.

Note that you cannot easily work around the problem when opening an
actual Org file. You would either have to advice the problematic Org
function, or cherry-pick the relevant commit from the release.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [ANN] Emergency bugfix release: Org mode 9.7.5
  2024-06-22 17:49 ` Ihor Radchenko
@ 2024-06-22 23:55   ` Greg Troxel
  2024-06-23  1:58     ` Steven Allen
  0 siblings, 1 reply; 20+ messages in thread
From: Greg Troxel @ 2024-06-22 23:55 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode, Bastien

(Thanks for fixing and your efforts on org.  I've been an org user since
at least July of 2010.)

Just to be clear, is this the commit that needs applying to emacs
sources, 29.3, 28.x, and so on?  It seems so, but I would rather not
guess.  I'm asking on behalf of pkgsrc, where I am managing the release
process for our 2024Q2 branch, due on 30 June.  Believe it or not we
have 20, 21, 26, 27, 28, 29 and a from-git version.  While some should
be pruned, some people use it on vaxes.   Any idea how far back this
goes?

Thanks,
Greg

commit f4cc61636947b5c2f0afc67174dd369fe3277aa8
Author: Ihor Radchenko <yantar92@posteo.net>
Date:   Tue Jun 18 13:06:44 2024 +0200

    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.

diff --git a/lisp/ol.el b/lisp/ol.el
index 7a7f4f558..8a556c7b9 100644
--- a/lisp/ol.el
+++ b/lisp/ol.el
@@ -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.


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [ANN] Emergency bugfix release: Org mode 9.7.5
  2024-06-22 23:55   ` Greg Troxel
@ 2024-06-23  1:58     ` Steven Allen
  0 siblings, 0 replies; 20+ messages in thread
From: Steven Allen @ 2024-06-23  1:58 UTC (permalink / raw)
  To: Greg Troxel, Ihor Radchenko; +Cc: emacs-orgmode, Bastien

Greg Troxel <gdt@lexort.com> writes:

> (Thanks for fixing and your efforts on org.  I've been an org user since
> at least July of 2010.)
>
> Just to be clear, is this the commit that needs applying to emacs
> sources, 29.3, 28.x, and so on?

Yes, that's the correct commit.

> It seems so, but I would rather not guess. I'm asking on behalf of
> pkgsrc, where I am managing the release process for our 2024Q2 branch,
> due on 30 June. Believe it or not we have 20, 21, 26, 27, 28, 29 and a
> from-git version. While some should be pruned, some people use it on
> vaxes. Any idea how far back this goes?

It was introduced in org 7.9 (commit [1] from July of 2012). From what I
can tell, it has been present in Emacs since emacs-24.2.

[1]: ef3d4b5965b828e85a535ef3f32999473c6a2a7a 

>
> Thanks,
> Greg
>
> commit f4cc61636947b5c2f0afc67174dd369fe3277aa8
> Author: Ihor Radchenko <yantar92@posteo.net>
> Date:   Tue Jun 18 13:06:44 2024 +0200
>
>     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.
>
> diff --git a/lisp/ol.el b/lisp/ol.el
> index 7a7f4f558..8a556c7b9 100644
> --- a/lisp/ol.el
> +++ b/lisp/ol.el
> @@ -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.


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [ANN] Emergency bugfix release: Org mode 9.7.5
  2024-06-22 16:10 [ANN] Emergency bugfix release: Org mode 9.7.5 Ihor Radchenko
  2024-06-22 17:49 ` Ihor Radchenko
  2024-06-22 17:59 ` emacs-orgmode
@ 2024-06-24  8:08 ` Bastien Guerry
  2024-06-28 15:09 ` [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec (was: [ANN] Emergency bugfix release: Org mode 9.7.5) Ihor Radchenko
  2024-06-28 15:23 ` [POLL] Bug of Feature? Attack vector via deceiving link abbrevs (was: [ANN] Emergency bugfix release: Org mode 9.7.5) Ihor Radchenko
  4 siblings, 0 replies; 20+ messages in thread
From: Bastien Guerry @ 2024-06-24  8:08 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode

Ihor Radchenko <yantar92@posteo.net> writes:

> I just released Org mode 9.7.5 that fixes a critical vulnerability.
> The release is coordinated with emergency Emacs 29.4 release.

Thank you a lot for your diligent and careful work on this!

-- 
 Bastien Guerry


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Assigned: CVE-2024-39331 (was: [ANN] Emergency bugfix release: Org mode 9.7.5)
  2024-06-22 19:15   ` Ihor Radchenko
@ 2024-06-24  9:09     ` Ihor Radchenko
  0 siblings, 0 replies; 20+ messages in thread
From: Ihor Radchenko @ 2024-06-24  9:09 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: emacs-orgmode, Bastien

Ihor Radchenko <yantar92@posteo.net> writes:

> emacs-orgmode@city17.xyz writes:
>
>> Will a CVE be released?
>
> Should be, I think.
> If nobody reports it independently by tomorrow, I will look into how to
> request a CVE number myself.

https://www.cve.org/CVERecord?id=CVE-2024-39331

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec (was: [ANN] Emergency bugfix release: Org mode 9.7.5)
  2024-06-22 16:10 [ANN] Emergency bugfix release: Org mode 9.7.5 Ihor Radchenko
                   ` (2 preceding siblings ...)
  2024-06-24  8:08 ` [ANN] Emergency bugfix release: Org mode 9.7.5 Bastien Guerry
@ 2024-06-28 15:09 ` Ihor Radchenko
  2024-06-28 15:51   ` [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec Suhail Singh
  2024-06-28 15:23 ` [POLL] Bug of Feature? Attack vector via deceiving link abbrevs (was: [ANN] Emergency bugfix release: Org mode 9.7.5) Ihor Radchenko
  4 siblings, 1 reply; 20+ messages in thread
From: Ihor Radchenko @ 2024-06-28 15:09 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: Bastien

Dear all,

> I just released Org mode 9.7.5 that fixes a critical vulnerability.
> The release is coordinated with emergency Emacs 29.4 release.
> ...
> The vulnerability involves arbitrary Shell code evaluation...

In a view of the recent vulnerability, we are considering to remove the
offending feature completely.

For the time being, we restricted %(function) constructs in #+LINK:
... lines to (1) pure functions (no side effects, no access to global
state); (2) functions explicitly marked by the user.

However, while discussing how to approach the vulnerability, we did not
find many examples of using #+LINK: label %(function) in the wild.

If you are actively using #+LINK: keywords with %(...) placeholders or
have any objections to this feature removal, please let us know.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [POLL] Bug of Feature? Attack vector via deceiving link abbrevs (was: [ANN] Emergency bugfix release: Org mode 9.7.5)
  2024-06-22 16:10 [ANN] Emergency bugfix release: Org mode 9.7.5 Ihor Radchenko
                   ` (3 preceding siblings ...)
  2024-06-28 15:09 ` [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec (was: [ANN] Emergency bugfix release: Org mode 9.7.5) Ihor Radchenko
@ 2024-06-28 15:23 ` Ihor Radchenko
  2024-06-28 15:52   ` Steven Allen
  2024-06-28 15:54   ` [POLL] Bug of Feature? Attack vector via deceiving link abbrevs Suhail Singh
  4 siblings, 2 replies; 20+ messages in thread
From: Ihor Radchenko @ 2024-06-28 15:23 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: Bastien, Steven Allen

Ihor Radchenko <yantar92@posteo.net> writes:

> I just released Org mode 9.7.5 that fixes a critical vulnerability.
> The release is coordinated with emergency Emacs 29.4 release.

This one is another potential issue (or a feature) we have found while
discussing the main vulnerability.

Currently, one can create an Org file like

#+LINK: https https://fake-gmail-login-page.xyz/
[[https://gmail.com]]

And the "https" link will actually be expanded according to the
abbreviation.  In other words, abbreviations take priority over the link
types in Org mode.

As illustrated above, one can try to trick user into clicking the above
"gmail" link, redirecting to completely different page instead.

On the other hand, I can totally see people making use of the current
behavior to have custom filters for existing link types. For example, to
redirect to archive.org when opening web links.

I am inclined to call this a feature, and leave the current behavior
unchanged, but would like to hear from others first.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec
  2024-06-28 15:09 ` [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec (was: [ANN] Emergency bugfix release: Org mode 9.7.5) Ihor Radchenko
@ 2024-06-28 15:51   ` Suhail Singh
  2024-06-28 16:20     ` Steven Allen
  0 siblings, 1 reply; 20+ messages in thread
From: Suhail Singh @ 2024-06-28 15:51 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode, Bastien

Ihor Radchenko <yantar92@posteo.net> writes:

> If you are actively using #+LINK: keywords with %(...) placeholders or
> have any objections to this feature removal, please let us know.

I do not actively use this feature, however, removing it seems
excessive.  IIUC, it's a useful feature in situations when the tag may
require deterministic, yet non-trivial manipulation.  The current
mechanism of restricting this to functions marked safe by user seems
sufficient.

Am I missing something?  Is the threat model such that it can only be
adequately addressed by removing the feature altogether?

-- 
Suhail


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [POLL] Bug of Feature? Attack vector via deceiving link abbrevs (was: [ANN] Emergency bugfix release: Org mode 9.7.5)
  2024-06-28 15:23 ` [POLL] Bug of Feature? Attack vector via deceiving link abbrevs (was: [ANN] Emergency bugfix release: Org mode 9.7.5) Ihor Radchenko
@ 2024-06-28 15:52   ` Steven Allen
  2024-06-28 15:54   ` [POLL] Bug of Feature? Attack vector via deceiving link abbrevs Suhail Singh
  1 sibling, 0 replies; 20+ messages in thread
From: Steven Allen @ 2024-06-28 15:52 UTC (permalink / raw)
  To: Ihor Radchenko, emacs-orgmode; +Cc: Bastien

Ihor Radchenko <yantar92@posteo.net> writes:

> Ihor Radchenko <yantar92@posteo.net> writes:
>
>> I just released Org mode 9.7.5 that fixes a critical vulnerability.
>> The release is coordinated with emergency Emacs 29.4 release.
>
> This one is another potential issue (or a feature) we have found while
> discussing the main vulnerability.
>
> Currently, one can create an Org file like
>
> #+LINK: https https://fake-gmail-login-page.xyz/
> [[https://gmail.com]]

This is no different from:

    [[https://fake-gmail-login-page.xyz][https://gmail.com]]

In both cases, mousing over the link will show you the actual target address.

On the other hand, having different faces for "plain" links (links where
the text in the buffer matches the link target) and special links would
be kind of nice.


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [POLL] Bug of Feature? Attack vector via deceiving link abbrevs
  2024-06-28 15:23 ` [POLL] Bug of Feature? Attack vector via deceiving link abbrevs (was: [ANN] Emergency bugfix release: Org mode 9.7.5) Ihor Radchenko
  2024-06-28 15:52   ` Steven Allen
@ 2024-06-28 15:54   ` Suhail Singh
  1 sibling, 0 replies; 20+ messages in thread
From: Suhail Singh @ 2024-06-28 15:54 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode, Bastien, Steven Allen

Ihor Radchenko <yantar92@posteo.net> writes:

> On the other hand, I can totally see people making use of the current
> behavior to have custom filters for existing link types.

Yes, I use this currently for redirecting reddit links.  It's certainly
a feature in my opinion.

-- 
Suhail


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec
  2024-06-28 15:51   ` [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec Suhail Singh
@ 2024-06-28 16:20     ` Steven Allen
  2024-06-28 16:45       ` Suhail Singh
  0 siblings, 1 reply; 20+ messages in thread
From: Steven Allen @ 2024-06-28 16:20 UTC (permalink / raw)
  To: Suhail Singh, Ihor Radchenko; +Cc: emacs-orgmode, Bastien


Suhail Singh <suhailsingh247@gmail.com> writes:
> Ihor Radchenko <yantar92@posteo.net> writes:
>
>> If you are actively using #+LINK: keywords with %(...) placeholders or
>> have any objections to this feature removal, please let us know.
>
> I do not actively use this feature, however, removing it seems
> excessive.  IIUC, it's a useful feature in situations when the tag may
> require deterministic, yet non-trivial manipulation.  The current
> mechanism of restricting this to functions marked safe by user seems
> sufficient.
>
> Am I missing something?  Is the threat model such that it can only be
> adequately addressed by removing the feature altogether?

There are two issues:

1. While this feature no longer invokes completely arbitrary code, it
still allows an attacker to call any function marked as "pure" which is
a pretty large attack surface.

2. Making it secure also made it significantly less useful, if it ever
was all that useful. For the %(...) specifier to be useful, you need a
pure/safe function that takes exactly one string argument and produces
the string you need. You can, of course, write that function; but then
you might as well use org-link-abbrev-alist instead of defining a
local #+LINK.

Personally, I'd start by forbidding %(...) placeholders in buffer-local
#+LINK: definitions, they're perfectly safe in org-link-abbrev-alist.


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec
  2024-06-28 16:20     ` Steven Allen
@ 2024-06-28 16:45       ` Suhail Singh
  2024-06-28 16:55         ` Ihor Radchenko
  2024-06-28 17:01         ` Steven Allen
  0 siblings, 2 replies; 20+ messages in thread
From: Suhail Singh @ 2024-06-28 16:45 UTC (permalink / raw)
  To: Steven Allen; +Cc: Suhail Singh, Ihor Radchenko, emacs-orgmode, Bastien

Steven Allen <steven@stebalien.com> writes:

> 1. While this feature no longer invokes completely arbitrary code, it
> still allows an attacker to call any function marked as "pure" which
> is a pretty large attack surface.

I am struggling to assess this, because it's not clear to me what the
threat model is.  Could you please elaborate?  How are the attacker and
potential victim interacting; what is the attack vector(s); who are the
threat agents and what is their goal that we are trying to guard
against, etc?

> You can, of course, write that function; but then you might as well
> use org-link-abbrev-alist instead of defining a local #+LINK.

Perhaps I misunderstood, I thought the thing being polled was whether or
not to allow org-link-abbrev-alist to have REPLACE (per its docstring)
be a function.  I.e., if %(my-function) is removed, so too would the
ability to have a function in the REPLACE position in
org-link-abbrev-alist.  Did I misunderstand?

-- 
Suhail


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec
  2024-06-28 16:45       ` Suhail Singh
@ 2024-06-28 16:55         ` Ihor Radchenko
  2024-06-28 17:34           ` Suhail Singh
  2024-06-28 17:01         ` Steven Allen
  1 sibling, 1 reply; 20+ messages in thread
From: Ihor Radchenko @ 2024-06-28 16:55 UTC (permalink / raw)
  To: Suhail Singh; +Cc: Steven Allen, emacs-orgmode, Bastien

Suhail Singh <suhailsingh247@gmail.com> writes:

>> You can, of course, write that function; but then you might as well
>> use org-link-abbrev-alist instead of defining a local #+LINK.
>
> Perhaps I misunderstood, I thought the thing being polled was whether or
> not to allow org-link-abbrev-alist to have REPLACE (per its docstring)
> be a function.  I.e., if %(my-function) is removed, so too would the
> ability to have a function in the REPLACE position in
> org-link-abbrev-alist.  Did I misunderstand?

Yup. I only meant %(...) placeholder constructs.
("linkkey" . REPLACE) where REPLACE is a function symbol will still be
allowed.

What will not be allowed is:

#+LINK: linkkey %(my-function)
and
("linkkey" . "...%(my-function)...") in `org-link-abbrev-alist'.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec
  2024-06-28 16:45       ` Suhail Singh
  2024-06-28 16:55         ` Ihor Radchenko
@ 2024-06-28 17:01         ` Steven Allen
  2024-06-28 17:55           ` Suhail Singh
  1 sibling, 1 reply; 20+ messages in thread
From: Steven Allen @ 2024-06-28 17:01 UTC (permalink / raw)
  To: Suhail Singh; +Cc: Suhail Singh, Ihor Radchenko, emacs-orgmode, Bastien

Suhail Singh <suhailsingh247@gmail.com> writes:

> Steven Allen <steven@stebalien.com> writes:
>
>> 1. While this feature no longer invokes completely arbitrary code, it
>> still allows an attacker to call any function marked as "pure" which
>> is a pretty large attack surface.
>
> I am struggling to assess this, because it's not clear to me what the
> threat model is.  Could you please elaborate?  How are the attacker and
> potential victim interacting; what is the attack vector(s); who are the
> threat agents and what is their goal that we are trying to guard
> against, etc?

Scenario: Attacker sends an email containing an inline org-mode part with a
malicious link abbreviation.

The concern is that, e.g., there may b a function _marked_ as pure
that's not actually pure, leaks some information, and/or has a security
vulnerability (e.g., a C function exposed to lisp that's marked as pure
but internally has, e.g., a buffer overflow).

Of course, the actual attack hypothetical. The question being asked here
is: is the %(..) specifier in link abbreviations useful enough to warent
the potential risks.

>> You can, of course, write that function; but then you might as well
>> use org-link-abbrev-alist instead of defining a local #+LINK.
>
> Perhaps I misunderstood, I thought the thing being polled was whether or
> not to allow org-link-abbrev-alist to have REPLACE (per its docstring)
> be a function.  I.e., if %(my-function) is removed, so too would the
> ability to have a function in the REPLACE position in
> org-link-abbrev-alist.  Did I misunderstand?

The question is whether or not %(function) placeholders should be
allowed in #+LINK: lines. It doesn't actually say anything about
allowing them in the global org-link-abbrev-alist. But to be explicit,
there are three options:

1. Allow them in both #+LINK: lines and the global
org-link-abbrev-alist.

2. Allow them in org-link-abbrev-alist only.

3. Remove them entirely.


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec
  2024-06-28 16:55         ` Ihor Radchenko
@ 2024-06-28 17:34           ` Suhail Singh
  0 siblings, 0 replies; 20+ messages in thread
From: Suhail Singh @ 2024-06-28 17:34 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: Suhail Singh, Steven Allen, emacs-orgmode, Bastien

Ihor Radchenko <yantar92@posteo.net> writes:

> Yup. I only meant %(...) placeholder constructs.  ("linkkey"
> . REPLACE) where REPLACE is a function symbol will still be allowed.

Thank you for confirming.  Please ignore my previous response.

-- 
Suhail


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec
  2024-06-28 17:01         ` Steven Allen
@ 2024-06-28 17:55           ` Suhail Singh
  2024-06-28 18:16             ` Steven Allen
  0 siblings, 1 reply; 20+ messages in thread
From: Suhail Singh @ 2024-06-28 17:55 UTC (permalink / raw)
  To: Steven Allen; +Cc: Suhail Singh, Ihor Radchenko, emacs-orgmode, Bastien

Steven Allen <steven@stebalien.com> writes:

> The concern is that, e.g., there may b a function _marked_ as pure
> that's not actually pure, leaks some information, and/or has a
> security vulnerability (e.g., a C function exposed to lisp that's
> marked as pure but internally has, e.g., a buffer overflow).

Are there any functions marked as pure, by default?

> 1. Allow them in both #+LINK: lines and the global
> org-link-abbrev-alist.
>
> 2. Allow them in org-link-abbrev-alist only.
>
> 3. Remove them entirely.

If no functions are marked as pure by default, 1 seems reasonable to me.
If some functions are marked as pure by default (by Emacs / Org mode),
then 2 seems reasonable.  I believe 3 is excessive.

-- 
Suhail


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec
  2024-06-28 17:55           ` Suhail Singh
@ 2024-06-28 18:16             ` Steven Allen
  0 siblings, 0 replies; 20+ messages in thread
From: Steven Allen @ 2024-06-28 18:16 UTC (permalink / raw)
  To: Suhail Singh; +Cc: Suhail Singh, Ihor Radchenko, emacs-orgmode, Bastien

Suhail Singh <suhailsingh247@gmail.com> writes:

> Steven Allen <steven@stebalien.com> writes:
>
>> The concern is that, e.g., there may b a function _marked_ as pure
>> that's not actually pure, leaks some information, and/or has a
>> security vulnerability (e.g., a C function exposed to lisp that's
>> marked as pure but internally has, e.g., a buffer overflow).
>
> Are there any functions marked as pure, by default?
>

Yes. Any function that starts with:

    (declare (pure t) ...

This flag was introduced to allow the byte/native compiler to better
optimize calls to pure functions. It's used here because "pure"
functions should be safe to call.


^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2024-06-28 18:17 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-22 16:10 [ANN] Emergency bugfix release: Org mode 9.7.5 Ihor Radchenko
2024-06-22 17:49 ` Ihor Radchenko
2024-06-22 23:55   ` Greg Troxel
2024-06-23  1:58     ` Steven Allen
2024-06-22 17:59 ` emacs-orgmode
2024-06-22 19:15   ` Ihor Radchenko
2024-06-24  9:09     ` Assigned: CVE-2024-39331 (was: [ANN] Emergency bugfix release: Org mode 9.7.5) Ihor Radchenko
2024-06-24  8:08 ` [ANN] Emergency bugfix release: Org mode 9.7.5 Bastien Guerry
2024-06-28 15:09 ` [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec (was: [ANN] Emergency bugfix release: Org mode 9.7.5) Ihor Radchenko
2024-06-28 15:51   ` [POLL] We plan to remove #+LINK: ...%(my-function) placeholder from link abbreviation spec Suhail Singh
2024-06-28 16:20     ` Steven Allen
2024-06-28 16:45       ` Suhail Singh
2024-06-28 16:55         ` Ihor Radchenko
2024-06-28 17:34           ` Suhail Singh
2024-06-28 17:01         ` Steven Allen
2024-06-28 17:55           ` Suhail Singh
2024-06-28 18:16             ` Steven Allen
2024-06-28 15:23 ` [POLL] Bug of Feature? Attack vector via deceiving link abbrevs (was: [ANN] Emergency bugfix release: Org mode 9.7.5) Ihor Radchenko
2024-06-28 15:52   ` Steven Allen
2024-06-28 15:54   ` [POLL] Bug of Feature? Attack vector via deceiving link abbrevs Suhail Singh

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).