## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-SMALLTOWN123-DETAILS-FOR-CVE-2022-46505
# CVE-2022-46505 详情
MatrixSSL 会话恢复漏洞
## 1\. 漏洞描述
MatrixSSL 4.5.1-open 及更早版本中存在一个问题,导致无法安全检查 SessionID 字段,从而导致滥用**全零 MasterSecret** ,进而可以解密机密数据。
## 2\. 受影响版本
MatrixSSL 4.5.1-open 及更早版本
## 3\. 漏洞类型
TLS 恢复会话解密
## 4\. 漏洞详情
MatrixSSL 服务器通过一个列表来存储协商的会话信息。
root@kitploit:~
static sslSessionEntry_t g_sessionTable[SSL_SESSION_TABLE_SIZE];
// SSL_SESSION_TABLE_SIZE is 32
root@kitploit:~
typedef struct
{
unsigned char id[SSL_MAX_SESSION_ID_SIZE]; // 32
unsigned char masterSecret[SSL_HS_MASTER_SIZE]; // 48
const sslCipherSpec_t *cipher;
unsigned char majVer;
unsigned char minVer;
short extendedMasterSecret; /* was the extension used? */
psTime_t startTime;
int32 inUse;
DLListEntry chronList;
} sslSessionEntry_t;
SessionID 字段的前四个字节是一个**小端序** 序列号,范围**从 0 到 31** 。

MatrixSSL 通过将接收到的会话 ID 的长度与四字节快速索引进行匹配,来判断会话是否为恢复会话。
然而,当存储列表初始化时,MasterSecret 全为零。
因此,恶意客户端可以发送**一个字节的 SessionID** 来尝试使用全零 MasterSecret 进行会话恢复。当服务器接收到一个字节的 sessionid 时,后续字节默认为 0。因此,它可以被验证并索引到列表中,而列表中对应序列号的 MasterSecret 可能仍为 0。如果发生这种情况,我们就能**计算出密钥并解密 TLS 通信数据** 。
`./matrixssl/matrixssl.c —> int32 matrixResumeSession(ssl_t *ssl)`


**添加用于调试的控制台输出:**

**测试结果:**


**使用全零 MasterSecret 进行解密!**
