VYPR
High severityNVD Advisory· Published Sep 18, 2024· Updated Sep 20, 2024

Missing checks for notification filter preferences editions in XWiki Platform

CVE-2024-46978

Description

XWiki Platform is a generic wiki platform offering runtime services for applications built on top of it. It's possible for any user knowing the ID of a notification filter preference of another user, to enable/disable it or even delete it. The impact is that the target user might start loosing notifications on some pages because of this. This vulnerability is present in XWiki since 13.2-rc-1. This vulnerability has been patched in XWiki 14.10.21, 15.5.5, 15.10.1, 16.0-rc-1. The patch consists in checking properly the rights of the user before performing any action on the filters. Users are advised to upgrade. It's possible to fix manually the vulnerability by editing the document XWiki.Notifications.Code.NotificationPreferenceService to apply the changes performed in commit e8acc9d8e6af7dfbfe70716ded431642ae4a6dd4.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
org.xwiki.platform:xwiki-platform-notifications-uiMaven
>= 13.2-rc-1, < 14.10.2114.10.21
org.xwiki.platform:xwiki-platform-notifications-uiMaven
>= 15.0-rc-1, < 15.5.515.5.5
org.xwiki.platform:xwiki-platform-notifications-uiMaven
>= 15.6-rc-1, < 15.10.115.10.1

Affected products

1

Patches

4
99193a7e9a20

XWIKI-20337: Bad condition for editing notification filter preferences

https://github.com/xwiki/xwiki-platformSimon UrliJan 19, 2024via ghsa
1 file changed · +1 1
  • xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-ui/src/main/resources/XWiki/Notifications/Code/NotificationPreferenceService.xml+1 1 modified
    @@ -52,7 +52,7 @@
     #elseif ("$!request.target" == 'user')
       #set ($targetDoc = $xwiki.getDocument($targetUser))
       #set ($targetRef = $services.model.resolveDocument($targetUser))
    -  #set($isActionAllowed = ($services.security.authorization.hasAccess('admin', $requestedUserDocRef) || $xcontext.userReference.equals($targetRef)))
    +  #set($isActionAllowed = ("$!request.action" == 'watchUser' || "$!request.action" == 'unwatchUser' || $services.security.authorization.hasAccess('admin', $requestedUserDocRef) || $xcontext.userReference.equals($targetRef)))
     #end
     #if ("$!request.action" == "" &amp;&amp; $request.method.equalsIgnoreCase('get'))
       This is a technical page for Notifications macro.
    
b9180b874a22

XWIKI-20337: Bad condition for editing notification filter preferences

https://github.com/xwiki/xwiki-platformSimon UrliJan 19, 2024via ghsa
1 file changed · +1 1
  • xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-ui/src/main/resources/XWiki/Notifications/Code/NotificationPreferenceService.xml+1 1 modified
    @@ -52,7 +52,7 @@
     #elseif ("$!request.target" == 'user')
       #set ($targetDoc = $xwiki.getDocument($targetUser))
       #set ($targetRef = $services.model.resolveDocument($targetUser))
    -  #set($isActionAllowed = ($services.security.authorization.hasAccess('admin', $requestedUserDocRef) || $xcontext.userReference.equals($targetRef)))
    +  #set($isActionAllowed = ("$!request.action" == 'watchUser' || "$!request.action" == 'unwatchUser' || $services.security.authorization.hasAccess('admin', $requestedUserDocRef) || $xcontext.userReference.equals($targetRef)))
     #end
     #if ("$!request.action" == "" &amp;&amp; $request.method.equalsIgnoreCase('get'))
       This is a technical page for Notifications macro.
    
4771573dac88

XWIKI-20337: Bad condition for editing notification filter preferences

https://github.com/xwiki/xwiki-platformSimon UrliDec 5, 2023via ghsa
1 file changed · +5 2
  • xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-ui/src/main/resources/XWiki/Notifications/Code/NotificationPreferenceService.xml+5 2 modified
    @@ -37,6 +37,7 @@
       <syntaxId>xwiki/2.1</syntaxId>
       <hidden>true</hidden>
       <content>{{velocity}}
    +#set($isActionAllowed = false)
     #if ("$!request.user" != "")
         #if ($request.user.contains("."))
           #set ($targetUser = $request.user)
    @@ -47,15 +48,17 @@
     #if ("$!request.target" == 'wiki')
       #set ($targetDoc = $xwiki.getDocument($services.model.createDocumentReference('', ['XWiki', 'Notifications', 'Code'], 'NotificationAdministration')))
       #set ($targetRef = $services.wiki.getCurrentWikiReference())
    +  #set($isActionAllowed = $hasAdmin)
     #elseif ("$!request.target" == 'user')
       #set ($targetDoc = $xwiki.getDocument($targetUser))
    -  #set ($targetRef = $targetUser)
    +  #set ($targetRef = $services.model.resolveDocument($targetUser))
    +  #set($isActionAllowed = ($services.security.authorization.hasAccess('admin', $requestedUserDocRef) || $xcontext.userReference.equals($targetRef)))
     #end
     #if ("$!request.action" == "" &amp;&amp; $request.method.equalsIgnoreCase('get'))
       This is a technical page for Notifications macro.
     #elseif (!$services.csrf.isTokenValid($request.csrf))
       #set ($discard = $response.sendError(401, $services.localization.render('notifications.settings.error.badCSRF')))
    -#elseif ("$!request.target" == 'wiki' &amp;&amp; !$hasAdmin)
    +#elseif (!$isActionAllowed)
       #set ($discard = $response.sendError(401))
     #elseif ("$!request.action" == "" || "$!request.target" == "" || ("$!request.target" == 'user' &amp;&amp; "$!request.user" == ""))
       #set ($discard = $response.sendError(400, $services.localization.render('notifications.settings.error.badParameters')))
    
e8acc9d8e6af

XWIKI-20337: Bad condition for editing notification filter preferences

https://github.com/xwiki/xwiki-platformSimon UrliDec 5, 2023via ghsa
1 file changed · +5 2
  • xwiki-platform-core/xwiki-platform-notifications/xwiki-platform-notifications-ui/src/main/resources/XWiki/Notifications/Code/NotificationPreferenceService.xml+5 2 modified
    @@ -37,6 +37,7 @@
       <syntaxId>xwiki/2.1</syntaxId>
       <hidden>true</hidden>
       <content>{{velocity}}
    +#set($isActionAllowed = false)
     #if ("$!request.user" != "")
         #if ($request.user.contains("."))
           #set ($targetUser = $request.user)
    @@ -47,15 +48,17 @@
     #if ("$!request.target" == 'wiki')
       #set ($targetDoc = $xwiki.getDocument($services.model.createDocumentReference('', ['XWiki', 'Notifications', 'Code'], 'NotificationAdministration')))
       #set ($targetRef = $services.wiki.getCurrentWikiReference())
    +  #set($isActionAllowed = $hasAdmin)
     #elseif ("$!request.target" == 'user')
       #set ($targetDoc = $xwiki.getDocument($targetUser))
    -  #set ($targetRef = $targetUser)
    +  #set ($targetRef = $services.model.resolveDocument($targetUser))
    +  #set($isActionAllowed = ($services.security.authorization.hasAccess('admin', $requestedUserDocRef) || $xcontext.userReference.equals($targetRef)))
     #end
     #if ("$!request.action" == "" &amp;&amp; $request.method.equalsIgnoreCase('get'))
       This is a technical page for Notifications macro.
     #elseif (!$services.csrf.isTokenValid($request.csrf))
       #set ($discard = $response.sendError(401, $services.localization.render('notifications.settings.error.badCSRF')))
    -#elseif ("$!request.target" == 'wiki' &amp;&amp; !$hasAdmin)
    +#elseif (!$isActionAllowed)
       #set ($discard = $response.sendError(401))
     #elseif ("$!request.action" == "" || "$!request.target" == "" || ("$!request.target" == 'user' &amp;&amp; "$!request.user" == ""))
       #set ($discard = $response.sendError(400, $services.localization.render('notifications.settings.error.badParameters')))
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

8

News mentions

0

No linked articles in our index yet.