Page MenuHomePhabricator

File::getLongDesc()/getShortDesc() is documented to return HTML, but some handlers return unescaped plain text
Closed, ResolvedPublicSecurity

Description

File::getLongDesc() is documented to return HTML, but the return value is treated as wikitext, and some handlers return unescaped plain text.

There is no security issue at the moment, since the wikitext parsing cleans up everything, but it seems like it's a bug waiting to happen.

Noticed in code review in https://gerrit.wikimedia.org/r/c/mediawiki/core/+/1152129/comment/7c010e3c_a286e36c/.

Event Timeline

matmarex set Security to Software security bug.Jun 2 2025, 6:17 PM
matmarex added a project: Security-Team.
matmarex changed the visibility from "Public (No Login Required)" to "Custom Policy".
matmarex changed the subtype of this task from "Task" to "Security Issue".

Ugh, there is also getShortDesc(), which has the same problem, and that one *is* used unsafely… :/

Change #1152790 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/core@master] Improve HTML escaping in getLongDesc(), getShortDesc() methods

https://gerrit.wikimedia.org/r/1152790

Change #1152791 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/extensions/TimedMediaHandler@master] Improve HTML escaping in getLongDesc(), getShortDesc() methods

https://gerrit.wikimedia.org/r/1152791

Change #1152802 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/core@master] Treat File::getLongDesc() as possibly unsafe HTML, not wikitext

https://gerrit.wikimedia.org/r/1152802

Change #1152803 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/core@master] Treat File::getShortDesc() as possibly unsafe HTML

https://gerrit.wikimedia.org/r/1152803

Patch https://gerrit.wikimedia.org/r/c/mediawiki/core/+/1152803 should be backported to supported releases. Other patches don't require backports.

matmarex renamed this task from File::getLongDesc() is documented to return HTML, but the return value is treated as wikitext, and some handlers return unescaped plain text to File::getLongDesc()/getShortDesc() is documented to return HTML, but some handlers return unescaped plain text.Jun 2 2025, 7:21 PM

Can you update the doc comments of the File and MediaHandler methods to indicate that it is unsafe HTML and Sanitizer::removeSomeTags() should be called on the result?

Change #1152803 merged by jenkins-bot:

[mediawiki/core@master] Treat File::getShortDesc() as possibly unsafe HTML

https://gerrit.wikimedia.org/r/1152803

Change #1152802 merged by jenkins-bot:

[mediawiki/core@master] Treat File::getLongDesc() as possibly unsafe HTML, not wikitext

https://gerrit.wikimedia.org/r/1152802

Change #1153686 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/core@wmf/1.45.0-wmf.3] Treat File::getShortDesc() as possibly unsafe HTML

https://gerrit.wikimedia.org/r/1153686

Change #1153687 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/core@wmf/1.45.0-wmf.4] Treat File::getShortDesc() as possibly unsafe HTML

https://gerrit.wikimedia.org/r/1153687

Change #1153686 merged by jenkins-bot:

[mediawiki/core@wmf/1.45.0-wmf.3] Treat File::getShortDesc() as possibly unsafe HTML

https://gerrit.wikimedia.org/r/1153686

Change #1153687 merged by jenkins-bot:

[mediawiki/core@wmf/1.45.0-wmf.4] Treat File::getShortDesc() as possibly unsafe HTML

https://gerrit.wikimedia.org/r/1153687

Change #1153710 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/core@REL1_44] Treat File::getShortDesc() as possibly unsafe HTML

https://gerrit.wikimedia.org/r/1153710

Change #1153711 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/core@REL1_43] Treat File::getShortDesc() as possibly unsafe HTML

https://gerrit.wikimedia.org/r/1153711

Change #1153712 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/core@REL1_42] Treat File::getShortDesc() as possibly unsafe HTML

https://gerrit.wikimedia.org/r/1153712

Change #1153713 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/core@REL1_39] Treat File::getShortDesc() as possibly unsafe HTML

https://gerrit.wikimedia.org/r/1153713

Change #1153713 merged by jenkins-bot:

[mediawiki/core@REL1_39] Treat File::getShortDesc() as possibly unsafe HTML

https://gerrit.wikimedia.org/r/1153713

Change #1153712 merged by jenkins-bot:

[mediawiki/core@REL1_42] Treat File::getShortDesc() as possibly unsafe HTML

https://gerrit.wikimedia.org/r/1153712

Change #1153711 merged by jenkins-bot:

[mediawiki/core@REL1_43] Treat File::getShortDesc() as possibly unsafe HTML

https://gerrit.wikimedia.org/r/1153711

Change #1153710 merged by jenkins-bot:

[mediawiki/core@REL1_44] Treat File::getShortDesc() as possibly unsafe HTML

https://gerrit.wikimedia.org/r/1153710

Can you update the doc comments of the File and MediaHandler methods to indicate that it is unsafe HTML and Sanitizer::removeSomeTags() should be called on the result?

Done, added to https://gerrit.wikimedia.org/r/c/mediawiki/core/+/1152790

Change #1152790 merged by jenkins-bot:

[mediawiki/core@master] Improve HTML escaping in getLongDesc(), getShortDesc() methods

https://gerrit.wikimedia.org/r/1152790

Change #1152791 merged by jenkins-bot:

[mediawiki/extensions/TimedMediaHandler@master] Improve HTML escaping in getLongDesc(), getShortDesc() methods

https://gerrit.wikimedia.org/r/1152791

matmarex added a subscriber: sbassett.

@sbassett Could you make this public? Thanks.

sbassett triaged this task as Medium priority.Jun 5 2025, 4:25 PM
sbassett awarded a token.
sbassett changed Author Affiliation from N/A to WMF Product.
sbassett removed a project: Patch-For-Review.
sbassett changed the visibility from "Custom Policy" to "Public (No Login Required)".
sbassett changed Risk Rating from N/A to Medium.
sbassett moved this task from Incoming to Our Part Is Done on the Security-Team board.