VYPR
Low severityNVD Advisory· Published Dec 30, 2020· Updated Aug 4, 2024

Parse Server stores password in plain text

CVE-2020-26288

Description

Parse Server is an open source backend that can be deployed to any infrastructure that can run Node.js. It is an npm package "parse-server". In Parse Server before version 4.5.0, user passwords involved in LDAP authentication are stored in cleartext. This is fixed in version 4.5.0 by stripping password after authentication to prevent cleartext password storage.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
parse-servernpm
< 4.5.04.5.0

Affected products

1

Patches

1
da905a357d06

Merge pull request from GHSA-4w46-w44m-3jq3

https://github.com/parse-community/parse-serverAntonio Davi Macedo Coelho de CastroDec 2, 2020via ghsa
2 files changed · +47 0
  • spec/LdapAuth.spec.js+46 0 modified
    @@ -211,3 +211,49 @@ it('Should fail if the LDAP server encounters an error while searching', done =>
           .finally(() => server.close());
       });
     });
    +
    +it('Should delete the password from authData after validation', done => {
    +  mockLdapServer(port, 'uid=testuser, o=example', true).then(server => {
    +    const options = {
    +      suffix: 'o=example',
    +      url: `ldap://localhost:${port}`,
    +      dn: 'uid={{id}}, o=example'
    +    };
    +
    +    const authData = { id: 'testuser', password: 'secret' };
    +
    +    ldap
    +      .validateAuthData(authData, options)
    +      .then(() => {
    +        expect(authData).toEqual({ id: 'testuser' });
    +        done();
    +      })
    +      .catch(done.fail)
    +      .finally(() => server.close());
    +  });
    +});
    +
    +it('Should not save the password in the user record after authentication', done => {
    +  mockLdapServer(port, 'uid=testuser, o=example', true).then(server => {
    +    const options = {
    +      suffix: 'o=example',
    +      url: `ldap://localhost:${port}`,
    +      dn: 'uid={{id}}, o=example'
    +    };
    +    reconfigureServer({ auth: { ldap: options } }).then(() => {
    +      const authData = { authData: { id: 'testuser', password: 'secret' } };
    +      Parse.User.logInWith('ldap', authData).then((returnedUser) => {
    +        const query = new Parse.Query("User");
    +        query
    +          .equalTo('objectId', returnedUser.id).first({ useMasterKey: true })
    +          .then((user) => {
    +            expect(user.get('authData')).toEqual({ ldap:{ id: 'testuser' }});
    +            expect(user.get('authData').ldap.password).toBeUndefined();
    +            done();
    +          })
    +          .catch(done.fail)
    +          .finally(() => server.close())
    +      })
    +    });
    +  });
    +});
    
  • src/Adapters/Auth/ldap.js+1 0 modified
    @@ -23,6 +23,7 @@ function validateAuthData(authData, options) {
     
       return new Promise((resolve, reject) => {
         client.bind(userCn, authData.password, ldapError => {
    +      delete(authData.password);
           if (ldapError) {
             let error;
             switch (ldapError.code) {
    

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

7

News mentions

0

No linked articles in our index yet.