Headline
CVE-2022-41933: XWIKI-19869: Improve user property storage · xwiki/xwiki-platform@443e839
XWiki Platform is a generic wiki platform offering runtime services for applications built on top of it. When the reset a forgotten password
feature of XWiki was used, the password was then stored in plain text in database. This only concerns XWiki 13.1RC1 and newer versions. Note that it only concerns the reset password feature available from the “Forgot your password” link in the login view: the features allowing a user to change their password, or for an admin to change a user password are not impacted. This vulnerability is particularly dangerous in combination with other vulnerabilities allowing to perform data leak of personal data from users, such as GHSA-599v-w48h-rjrm. Note that this vulnerability only concerns the users of the main wiki: in case of farms, the users registered on subwiki are not impacted thanks to a bug we discovered when investigating this. The problem has been patched in version 14.6RC1, 14.4.3 and 13.10.8. The patch involves a migration of the impacted users as well as the history of the page, to ensure no password remains in plain text in the database. This migration also involves to inform the users about the possible disclosure of their passwords: by default, two emails are automatically sent to the impacted users. A first email to inform about the possibility that their password have been leaked, and a second email using the reset password feature to ask them to set a new password. It’s also possible for administrators to set some properties for the migration: it’s possible to decide if the user password should be reset (default) or if the passwords should be kept but only hashed. Note that in the first option, the users won’t be able to login anymore until they set a new password if they were impacted. Note that in both options, mails will be sent to users to inform them and encourage them to change their passwords.
@@ -0,0 +1,98 @@ /* * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.xwiki.mail.internal.factory.text;
import java.io.IOException; import java.util.HashMap; import java.util.Map;
import javax.mail.Address; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart;
import org.junit.jupiter.api.Test; import org.xwiki.mail.ExtendedMimeMessage; import org.xwiki.mail.MimeBodyPartFactory; import org.xwiki.properties.ConverterManager; import org.xwiki.test.junit5.mockito.ComponentTest; import org.xwiki.test.junit5.mockito.InjectMockComponents; import org.xwiki.test.junit5.mockito.MockComponent;
import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when;
/** * Tests for {@link TextMimeMessageFactory}. * * @version $Id$ */ @ComponentTest class TextMimeMessageFactoryTest { @InjectMockComponents private TextMimeMessageFactory textMimeMessageFactory;
@MockComponent private ConverterManager converterManager;
@MockComponent private MimeBodyPartFactory<String> mimeBodyPartFactory;
@Test void createMessage() throws MessagingException, IOException { String source = "Some mail content"; Map<String, Object> parameters = new HashMap<>(); parameters.put("to", “[email protected]”); parameters.put("from", “[email protected]”); parameters.put("type", “text”); parameters.put("subject", “important email”);
Address from = new InternetAddress(“[email protected]”); Address to = new InternetAddress(“[email protected]”);
when(this.converterManager.convert(Address[].class, “[email protected]”)).thenReturn(new Address[] {to}); when(this.converterManager.convert(Address.class, “[email protected]”)).thenReturn(from);
MimeBodyPart bodyPart = mock(MimeBodyPart.class); when(this.mimeBodyPartFactory.create(source, parameters)).thenReturn(bodyPart);
ExtendedMimeMessage expectedMessage = new ExtendedMimeMessage(); expectedMessage.setFrom(from); expectedMessage.setRecipient(Message.RecipientType.TO, to); expectedMessage.setSubject(“important email”); expectedMessage.setType(“text”); Multipart multipart = new MimeMultipart(“mixed”); multipart.addBodyPart(bodyPart); expectedMessage.setContent(multipart);
MimeMessage message = this.textMimeMessageFactory.createMessage(source, parameters); assertEquals(to, message.getRecipients(Message.RecipientType.TO)[0]); assertEquals(from, message.getFrom()[0]); assertEquals("important email", message.getSubject()); assertEquals(bodyPart, ((Multipart) message.getContent()).getBodyPart(0)); } }
Related news
XWiki Platform is a generic wiki platform. Starting in 7.2-milestone-2 and prior to versions 14.10.15, 15.5.2, and 15.7-rc-1, the Solr-based search in XWiki discloses the password hashes of all users to anyone with view right on the respective user profiles. By default, all user profiles are public. This vulnerability also affects any configurations used by extensions that contain passwords like API keys that are viewable for the attacker. Normally, such passwords aren't accessible but this vulnerability would disclose them as plain text. This has been patched in XWiki 14.10.15, 15.5.2 and 15.7RC1. There are no known workarounds for this vulnerability.
### Impact We discovered that when the reset a forgotten password feature of XWiki was used, the password was then stored in plain text in database. This only concerns XWiki 13.1RC1 and next versions. Note that it only concerns the reset password feature available from the "Forgot your password" link in the login view: the features allowing a user to change their password, or for an admin to change a user password are not impacted. This vulnerability is particularly dangerous in combination with other vulnerabilities allowing to perform data leak of personal data from users, such as https://github.com/xwiki/xwiki-platform/security/advisories/GHSA-599v-w48h-rjrm. Note that this vulnerability only concerns the users of the main wiki: in case of farms, the users registered on subwiki are not impacted thanks to a bug we discovered when investigating this. ### Patches The problem has been patched in version 14.6RC1, 14.4.3 and 13.10.8. The patch involves a migration of the impacted u...