View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0000856 | LDMud 3.7 | General | public | 2017-12-16 10:41 | 2022-10-06 21:00 |
| Reporter | manuel | Assigned To | |||
| Priority | normal | Severity | major | Reproducibility | always |
| Status | confirmed | Resolution | open | ||
| OS | gnu/linux | OS Version | current | ||
| Summary | 0000856: Cipher list in tls.h lacks modern ciphers | ||||
| Description | Up to date tls libraries like libgnutls or libssl (from openssl) provide ciphers that are not listed in mudlib/sys/tls.h. If the define TLS_CIPHER_NAME(x) is called naively it may choke on a bad index. | ||||
| Steps To Reproduce | Install mudlib/sys/tls.h and link ldmud with libgnutls28 (current dev version in debian stable is 3.5.8). Initiate a tls session with TLS_CIPHER_AES_256_GCM or any other cipher that is not provided in tls.h. Call TLS_CIPHER_NAME(x). | ||||
| Additional Information | See the attached example of a tls.h updated for usage with a current libgnutls28. | ||||
| Tags | No tags attached. | ||||
| Attached Files | tls.h (2,600 bytes)
#ifndef LPC_TLS_H
#define LPC_TLS_H
/* Field indices for the result of tls_query_connection_info() */
#define TLS_CIPHER 0
#define TLS_COMP 1
#define TLS_KX 2
#define TLS_MAC 3
#define TLS_PROT 4
#define TLS_INFO_MAX 5 /* Total number of result fields */
/* Interpretation of the cipher information */
#define TLS_CIPHER_TABLE ({ \
"TLS_CIPHER_UNKNOWN", \
"TLS_CIPHER_NULL", \
"TLS_CIPHER_ARCFOUR_128", \
"TLS_CIPHER_3DES_CBC", \
"TLS_CIPHER_AES_128_CBC", \
"TLS_CIPHER_AES_256_CBC", \
"TLS_CIPHER_ARCFOUR_40", \
"TLS_CIPHER_CAMELLIA_128_CBC", \
"TLS_CIPHER_CAMELLIA_256_CBC", \
"TLS_CIPHER_AES_192_CBC", \
"TLS_CIPHER_AES_128_GCM", \
"TLS_CIPHER_AES_256_GCM", \
"TLS_CIPHER_CAMELLIA_192_CBC", \
"TLS_CIPHER_SALSA20_256", \
"TLS_CIPHER_ESTREAM_SALSA20_256", \
"TLS_CIPHER_CAMELLIA_128_GCM", \
"TLS_CIPHER_CAMELLIA_256_GCM", \
"TLS_CIPHER_RC2_40_CBC", \
"TLS_CIPHER_DES_CBC", \
"TLS_CIPHER_AES_128_CCM", \
"TLS_CIPHER_AES_256_CCM", \
"TLS_CIPHER_AES_128_CCM", \
"TLS_CIPHER_AES_256_CCM_8", \
"TLS_CIPHER_CHACHA20_POLY1305" \
})
#define TLS_CIPHER_NAME(x) TLS_CIPHER_TABLE[(x)]
/* Interpretation of the key-exchange information */
#define TLS_KX_TABLE ({ \
"TLS_KX_UNKNOWN", \
"TLS_KX_RSA", \
"TLS_KX_DHE_DSS", \
"TLS_KX_DHE_RSA", \
"TLS_KX_ANON_DH", \
"TLS_KX_SRP", \
"TLS_KX_RSA_EXPORT", \
"TLS_KX_SRP_RSA", \
"TLS_KX_SRP_DSS", \
"TLS_KX_PSK", \
"TLS_KX_DHE_PSK", \
"TLS_KX_ANON_ECDH", \
"TLS_KX_ECDHE_RSA", \
"TLS_KX_ECDHE_ECDSA", \
"TLS_KX_ECDHE_PSK", \
"TLS_KX_RSA_PSK" \
})
#define TLS_KX_NAME(x) TLS_KX_TABLE[(x)]
/* Interpretation of the MAC information */
#define TLS_MAC_TABLE ({ \
"TLS_MAC_UNKNOWN", \
"TLS_MAC_NULL", \
"TLS_MAC_MD5", \
"TLS_MAC_SHA1", \
"TLS_MAC_RMD160", \
"TLS_MAC_MD2", \
"TLS_MAC_SHA256", \
"TLS_MAC_SHA384", \
"TLS_MAC_SHA512", \
"TLS_MAC_SHA224" \
})
#define TLS_MAC_NAME(x) TLS_MAC_TABLE[(x)]
/* Interpretation of the compression information */
#define TLS_COMP_TABLE ({ \
"TLS_COMP_UNKOWN", \
"TLS_COMP_NULL", \
"TLS_COMP_DEFLATE", \
"TLS_COMP_LZO" \
})
#define TLS_COMP_NAME(x) TLS_COMP_TABLE[(x)]
/* Interpretation of the protocol information */
#define TLS_PROT_TABLE ({ \
"TLS_PROT_NONE", \
"TLS_PROT_SSL3", \
"TLS_PROT_TLS1_0", \
"TLS_TLS1_1", \
"TLS_TLS1_2", \
})
#define TLS_PROT_NAME(x) TLS_PROT_TABLE[(x)]
/* Recognized hash() algorithms (not all may be supported at runtime) */
#define TLS_HASH_SHA1 (1)
#define TLS_HASH_SHA224 (2)
#define TLS_HASH_SHA256 (3)
#define TLS_HASH_SHA384 (4)
#define TLS_HASH_SHA512 (5)
#define TLS_HASH_MD5 (6)
#define TLS_HASH_RIPEMD160 (7)
#endif /* LPC_TLS_H */
| ||||
|
|
And as far as I can see, it won't work at all with OpenSSL, because then tls_query_connection_info() will return the cipher name, not any index. IMHO the API is not great even with an up-to-date table/tls.h. I would argue, that tls_query_connection_info() should - if necessary - translate any enums/indices from the used crypto lib to a common name... |
|
|
I agree. |
|
|
The efun should be changed to return a struct and the struct should contain strings for algorithms instead of ids. Target LDMud 3.7. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2017-12-16 10:41 | manuel | New Issue | |
| 2017-12-16 10:41 | manuel | File Added: tls.h | |
| 2017-12-16 21:31 | zesstra | Note Added: 0002285 | |
| 2018-01-30 22:46 | Gnomi | Note Added: 0002446 | |
| 2018-01-30 23:00 | zesstra | Project | LDMud => LDMud 3.5 |
| 2018-01-30 23:01 | zesstra | Status | new => confirmed |
| 2022-10-06 21:00 | Gnomi | Note Added: 0002703 | |
| 2022-10-06 21:00 | Gnomi | Project | LDMud 3.5 => LDMud 3.7 |
| 2022-10-06 21:00 | Gnomi | Category | Runtime => General |