VYPR
Critical severityNVD Advisory· Published Jun 16, 2021· Updated Aug 3, 2024

Improper Verification of Cryptographic Signature in tenvoy

CVE-2021-32685

Description

tEnvoy contains the PGP, NaCl, and PBKDF2 in node.js and the browser (hashing, random, encryption, decryption, signatures, conversions), used by TogaTech.org. In versions prior to 7.0.3, the verifyWithMessage method of tEnvoyNaClSigningKey always returns true for any signature that has a SHA-512 hash matching the SHA-512 hash of the message even if the signature was invalid. This issue is patched in version 7.0.3. As a workaround: In tenvoy.js under the verifyWithMessage method definition within the tEnvoyNaClSigningKey class, ensure that the return statement call to this.verify ends in .verified.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
tenvoynpm
< 7.0.37.0.3

Affected products

1

Patches

1
a121b34a45e2

Critical security fix in verifyWithMessage

https://github.com/TogaTech/tEnvoyCMEONEJun 15, 2021via ghsa
2 files changed · +2 2
  • node/tenvoy.js+1 1 modified
    @@ -2166,7 +2166,7 @@ function tEnvoyNaClSigningKey(key, type = "secret", password = null, passwordPro
     			throw "tEnvoyNaClSigningKey Fatal Error: Invalid signature.";
     		}
     		let hash = _tEnvoy.util.hexToBytes(signed.split("::")[0]);
    -		return this.verify(signed, password) && _tEnvoy.util.bytesToHex(_nacl.hash(_tEnvoy.util.pack(message))) == _tEnvoy.util.bytesToHex(hash);
    +		return this.verify(signed, password).verified && _tEnvoy.util.bytesToHex(_nacl.hash(_tEnvoy.util.pack(message))) == _tEnvoy.util.bytesToHex(hash);
     	}
     	
     	this.toPublic = (password = null) => {
    
  • tenvoy.js+1 1 modified
    @@ -48183,7 +48183,7 @@ function tEnvoyNaClSigningKey(key, type = "secret", password = null, passwordPro
     			throw "tEnvoyNaClSigningKey Fatal Error: Invalid signature.";
     		}
     		let hash = _tEnvoy.util.hexToBytes(signed.split("::")[0]);
    -		return this.verify(signed, password) && _tEnvoy.util.bytesToHex(_nacl.hash(_tEnvoy.util.pack(message))) == _tEnvoy.util.bytesToHex(hash);
    +		return this.verify(signed, password).verified && _tEnvoy.util.bytesToHex(_nacl.hash(_tEnvoy.util.pack(message))) == _tEnvoy.util.bytesToHex(hash);
     	}
     	
     	this.toPublic = (password = null) => {
    

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

5

News mentions

0

No linked articles in our index yet.