Re: [PEAR-QA] Fwd: Insecure RSA Encryption in jCryption, PEAR Crypt_RSA and Crypt_RSA2
[email protected] ("Daniel O'Connor") Thu, 1 Dec 2011 07:38:53 +1030
| Newsgroups | php.pear.qa |
|---|---|
| Message-ID | <CAJsZyFAFSQoaVQv2U8zwGTnVzYL94PEnG1s7w9p18HRBDkr_cg@mail.gmail.com> |
https://github.com/pear/Crypt_RSA for patches; I've got NFI how to solve it except "fork phpseclib's Crypt_RSA" On Thu, Dec 1, 2011 at 4:12 AM, Stefan Neufeind <[email protected]> wrote: > Hello PEARs, :-) > > just wanted to share that "security-announcement" with you. > > > Regards, > Stefan > > -------- Original Message -------- > Subject: Insecure RSA Encryption in jCryption, PEAR Crypt_RSA and > Crypt_RSA2 > Date: Wed, 30 Nov 2011 11:17:50 +0100 > From: Daniel Roethlisberger <[email protected]> > Organization: SWITCH-CERT > To: [email protected] > > SWITCH-CERT SECURITY ADVISORY > ============================= > > Vulnerability: Insecure Implementation of RSA Encryption > Affected Products: jCryption, PEAR Crypt_RSA, PEAR Crypt_RSA2 > Advisory Date: 2011-11-30 > Advisory Author: Daniel Roethlisberger, SWITCH-CERT > > > ## Introduction > > Web applications using jCryption, PEAR Crypt_RSA or Crypt_RSA2 to > provide confidentiality are vulnerable to exposure of the data > protected by RSA encryption. > > jCryption is a jQuery based library for encrypted transmission of > HTML form data from web browser to web application. jCryption is > designed to provide confidentiality against passive attacks. > PEAR Crypt_RSA and Crypt_RSA2 are libraries providing RSA > encryption to PHP/PEAR based web applications. PEAR Crypt_RSA2 > was designed to be compatible with jCryption. > > jCryption and PEAR Crypt_RSA2 implement RSA with a static > checksum and no random padding. PEAR Crypt_RSA implements RSA > with static padding. The missing randomness in the padding leads > to a loss of semantic security [1] and thus allows the RSA > encryption to be broken [2,3] under realistic real-world > circumstances. > > > ## Affected Products > > Vulnerable: > - jCryption 1.2 > - jCryption 1.1 > - PEAR Crypt_RSA > - PEAR Crypt_RSA2 > > Not Vulnerable: > - phpseclib Crypt_RSA > > > ## Workaround / Solution > > Enabling TLS instead of relying on jCryption is a workaround. > > In general, only RSA implementations using a secure padding > scheme such as PKCS#1 OAEP [4] should be used, for example the > phpseclib version of Crypt_RSA. > > > ## Technical Description > > The cryptographical protocol implemented by jCryption 1.2 is as > follows: > > 1) Client requests URL. > > 2) Server generates per-session RSA keypair with e = 0x10001 and > random primes p and q. > > 3) Server sends client the HTML form, the jCryption JavaScript > code and the per-session RSA public key (e, n). > > 4) Client encrypts form data as follows: > checksum = checksum(plaintext); > ciphertext = RSA_encrypt(checksum || plaintext); > using modulus n, exponent e, deterministic checksum function > (modular sum of all bytes) and plain RSA in ECB mode with null > padding. > > 5) Client sends ciphertext to server, which does the reverse of 4 > to decrypt the message using the per-session private key d. > > PEAR Crypt_RSA2 provides RSA encryption/decryption compatible > with jCryption, thus essentially just step 4. > > PEAR Crypt_RSA uses a plain RSA operation in the following way: > > ciphertext = RSA_encrypt(plaintext || 0x01); > > Using modulus n, exponent e, concatenation ||, and RSA_encrypt() > being plain RSA in ECB mode with null padding. There is no > randomness in this scheme. > > These are essentially plain textbook RSA with deterministic > padding. There is a number of well-known attacks against plain > RSA [2,3]. An attacker with the ability to sniff HTTP traffic > can use these attacks to break the RSA encryption, which is the > exact attack scenario that jCryption is designed to protect > against. The most obvious attack: Because the scheme is not > semantically secure [1], an attacker can guess likely plaintexts, > encrypt them using the known public key, and compare the > resulting cyphertext to the original cyphertext. > > The attack scenarios for PEAR Crypt_RSA and Crypt_RSA2 depend on > the way they are used by an application, but in general, > confidentiality is lost in the same way. > > > ## Other Attacks > > Of course, since the jCryption scheme lacks authentication and > integrity, it is also vulnerable to active attacks (MitM). > However, since jCryption was not designed to protect against > active attacks and does not claim to do so, that's out of scope > of this advisory, even if it is totally relevant in practice. > > > ## Disclosure Timeline > > 2011-11-30: Public disclosure due to no response (jCryption) > and wont fix (PEAR Crypt_RSA) answers. > 2011-08-13: PEAR project forwards initial notification to a > public mailing list; response: wont fix. > 2011-08-10: PEAR Crypt_RSA original author response: not > maintained anymore. > 2011-08-10: Initial vendor/author notification for jCryption > and PEAR Crypt_RSA. > 2011-08-02: Discovery by Daniel Roethlisberger, SWITCH-CERT. > > > ## References > > [1] http://en.wikipedia.org/wiki/Semantic_security > > [2] http://en.wikipedia.org/wiki/RSA#Attacks_against_plain_RSA > > [3] D. Boneh, A. Joux, P. Nguyen: > Why Textbook ElGamal and RSA Encryption are Insecure > > > http://www.comms.engg.sussex.ac.uk/fft/crypto/Why_Textbook_ElGamal_and_RSA_Encryption_are_Insecure.pdf > > [4] RFC 3447: Public-Key Cryptography Standards (PKCS) #1: > RSA Cryptography Specifications Version 2.1 > https://www.ietf.org/rfc/rfc3447.txt > > -- > PEAR QA Mailing List (http://pear.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > >