Hi Openssl,

 

Recently we identified a following issue when snmpwalk is being done on
some tables:

 
$ snmpwalk -t 100 -v3 -l authpriv -u snmpsha -a SHA -A otci1234 -x DES
-X otci1234 10.72.181.53 .1.3.6.1.4.1.789.1.5.11.1.1
snmpwalk: Decryption error

 

The problem is in freebsd crypto function - EVP_DecryptFinal_ex().

 

I have pasted the problem piece of code:

/freebsd/crypto/openssl/crypto/evp/evp_enc.c:

 

    458                n=ctx->final[b-1];

    459                if (n == 0 || n > (int)b)

    460                        {

    461
EVPerr(EVP_F_EVP_DECRYPTFINAL_EX,EVP_R_BAD_DECRYPT);

    462                        return(0);

    463                        }

 

(n == 0) is a valid case for some OIDs.

 

I have instrumented the code (Added these lines) in file
/smf/src/snmp/security/Snmpv3Security.cc.

 

    780     int finalBlkLen = 0;

    781

    782     cout << "Rakesh blk size" << cipherCtx.cipher->block_size;

    783     for (int i=0; i< 8; i++) {

    784         int x = cipherCtx.final[i];

    785         cout <<"Rakesh final:" << x << endl;

    786         x = cipherCtx.buf[i];

    787         cout << "Rakesh buf:" << x << endl;

    788     }

    789

    790     if (!EVP_DecryptFinal(&cipherCtx, *plain + *plainLen,
&finalBlkLen)) {

............

.........

 

 

Tables returning decrypt error:

==============================

OID: .1.3.6.1.4.1.789.1.25.1.1.0

Rakesh blk size8

Rakesh final:21

Rakesh buf:0

Rakesh final:1

Rakesh buf:0

Rakesh final:25

Rakesh buf:0

Rakesh final:1

Rakesh buf:0

Rakesh final:1

Rakesh buf:0

Rakesh final:0

Rakesh buf:0

Rakesh final:5

Rakesh buf:0

Rakesh final:0    <---- last byte (n==0)   

Rakesh buf:0

Rakesh blk size8

Rakesh final:21

Rakesh buf:0

Rakesh final:1

Rakesh buf:0

Rakesh final:25

Rakesh buf:0

Rakesh final:1

Rakesh buf:0

Rakesh final:1

Rakesh buf:0

Rakesh final:0

Rakesh buf:0

Rakesh final:5

Rakesh buf:0

Rakesh final:0   <---- last byte (n==0)

Rakesh buf:0   

 

 

This is working tables :

=============================

OID:.1.3.6.1.4.1.789.1.5.8.1.1.1028

Rakesh blk size8

Rakesh final:5

Rakesh buf:0

Rakesh final:0

Rakesh buf:0

Rakesh final:6

Rakesh buf:0

Rakesh final:6

Rakesh buf:0

Rakesh final:6

Rakesh buf:0

Rakesh final:6

Rakesh buf:0

Rakesh final:6

Rakesh buf:0

Rakesh final:6   <---- (n==6)

Rakesh buf:0

Rakesh blk size8

Rakesh final:5

Rakesh buf:0

Rakesh final:0

Rakesh buf:0

Rakesh final:6

Rakesh buf:0

Rakesh final:6

Rakesh buf:0

Rakesh final:6

Rakesh buf:0

Rakesh final:6

Rakesh buf:0

Rakesh final:6

Rakesh buf:0

Rakesh final:6   <--- (n==6)

Rakesh buf:0

 

Hence the check (n==0) needs to be removed in EVP_DecryptFinal_ex()
function.

 

 

Your thoughts?

 

Regards,

Rakesh

 

Reply via email to