libssh C 库的安全评估报告(下):其他杂项问题 - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com

libssh C 库的安全评估报告(下):其他杂项问题

丝绸之路 技术 2020-02-19 10:00:00
收藏

导语:本节涵盖了一些值得注意的发现,这些发现不会导致漏洞利用,但可能有助于攻击者在未来实现其恶意攻击目标。这些结果中的大多数都是有缺陷的代码片段,无法提供简单的调用方法。总而言之,当存在漏洞时,利用漏洞并不总是会成功。

libssh渗透测试报告(上):已识别的漏洞解析

目录

· 引言

· 评估范围

· 已识别的漏洞

         · SSH-01-003 客户端:在错误的状态下缺少NULL检查导致崩溃(低危)

         · SSH-01-004 SCP:未经过滤的位置参数导致命令执行(高危)

         · SSH-01-006 通用:各种未检查的空指针解引用导致DOS(低危)

         · SSH-01-007 PKI Gcrypt:潜在的使用 RSA 公钥的 UAF/双重释放(中危)

         · SSH-01-010 SSH:指纹识别中使用了弃用的哈希函数(低危)

         · SSH-01-011 SSHX25519Ed25519上缺少点验证(中危)

         · SSH-01-011 SSHX25519Ed25519上缺少点验证(中危)

         · SSH-01-014 配置解析:整数下溢导致OOB数组访问(低危)

· 杂项问题

         · SSH-01-001 状态机:应明确设置状态机的初始状态(信息)

         · SSH-01-002 Kex:迭代同一个数组时使用了不同的边界宏(信息)

         · SSH-01-005 代码质量:分配期间的整数符号混乱(低危)

         · SSH-01-008 SCP:通过未转义的文件名进行协议注入(低危)

         · SSH-01-009 SSH:未实现 RFC4255(信息)

         · SSH-01-012 PKI:通过未初始化的堆栈缓冲区泄漏信息(低危)

· 结论

问题

本节盖了一值得意的现,些发不会致漏洞利用,但可有助攻击在未实现其恶攻击目标这些果中大多都是缺陷的码片段无法供简的调方法总而言,当存在漏洞时,利用洞并不总是会成功。

SSH-01-001 状态机:应明确设置状态机的初始状态(信息)

在整代码中,同的量用跟踪同的态。这括整会话态,处于份验证态或正在验证的会话。一个示例是跟踪握手状的变量。

我们发这些置初状态因为分配的内存是在分用空字节初始化的。

试期间,这并有导任何题。但,将些变量式设为初状态助于面理解代,并可以在假某个态但给定初始状态的情况下防止问题的发生。此,议对一问作出明确的明,在声明中规定初始

SSH-01-002 Kex:迭代同一个数组时使用了不同的边界宏(信息) 

在检不同 SSH 息的理程序数时我们发现迭代一个组时使用了两不同宏作 for-loop 代了一 string 数组一个使上界 KEX_METHODS_SIZE SSH_KEX_METHODS  迭代。这边界的读和操作,为这两界限相互义的下面代码示了个迭并突了相的部

受影响的文件

libssh-0.9.0/src/kex.c

响的代码

1580703616108008.png

在这测试间,个上被定为相的大,因此会引任何题。是,果未来对代码进行了更改导致其中个定义也发生了更改,则可能会出现出边界的问题。

因此建议两个环迭中使相同,或者使这两定义互依。例,让 KEX_METHODS_SIZE 始终与 SSH_KEX_METHODS 相同。

SSH-01-005 代码质量:分配期间的整数符号混乱(低危)

在更般的代码析中我们意到量声和赋值常改符号这通会导意外的控流,特别是隐式转换发生的时候。为了有符号整数换为无符号整数(或相反)有潜在问题,我们使用了以 Semmle 查询

SemmleQuery

1580703616137383.png

LGTM

https://lgtm.com/query/6155169963772014869/

注意的发现

libssh-0.9.0/src/sftp.c (count 是有符号的, sftp->ext->count 是无符号的):

int count = sftp->ext->count;

• ibssh-0.9.0/src/sftpserver.c (val is 无符号的, i 是有符号的):

val = i;

• ibssh-0.9.0/src/sftp.c (ssh_buffer_get_len 返回的是无符号的, packetlen 有符号的):

packetlen=ssh_buffer_get_len(buffer);

上面提到的发现 LGTM 链接中导致安全漏仍然是糟的编码践的结果,可能会在未来致安全漏洞。建议检查上面 Semmle 果,并确发生制转换。这可以通过声左侧变量的类型来实现

SSH-01-008 SCP:通过未转义的文件名进行协议注入(低危)

我们发现 SCP 议消中使用件名没有确编。如未经过过滤户输被传递给关的库函数,攻击者可注入任意 SCP 协议消并在当前 SCP IP 的服务器中创建任意件。面的码片显示了 SCP 协议如何件名除了提路径基本称外没有行其他的过滤处理。

响的代码

image.png

采用与 OpenSSH 方法,并使用可见编码路径进行编码。

SSH-01-009 SSH:未实现 RFC4255(信息)

我们发 libssh RFC4255描述通过 DNS 查实 SSH 证,尽管已经出在了支持的互联网标准 libssh 中。

要么实现该标准,要么其标记为当前不受 libssh 持,因为建议的功会出流的任何位置。

SSH-01-012 PKI:通过未初始化的堆栈缓冲区泄漏信息(低危) 

我们现,私钥解密程中堆栈冲区有初始,从导致在的息泄。为了将密读入缓区,我调用了 auth_fn() 调函,它基本等同于个用户定的回调数。在示例应用程序中这个回调只是将缓冲区 ssh_getpass()

受影响的文件

libssh-0.9.0/src/pki_container_openssh.c

响的代码

image.png

ssh_getpass() 的作用是禁用stdin示,并调ssh_gets()函数,在这里输出提供的缓冲是为了防止第节不为零。由于缓冲区pki_private_key_decrypt()始化的,所以可能会发堆栈

受影响的文件

libssh-0.9.0/src/getpass.c

响的代码

image.png

依赖用户在提供正确初始是不安全的。议使零初始化pki_private_key_decrypt()pki_private_key_encrypt() 中的passphrase,以止堆字节的潜在泄漏。

引言中所指出的,对libssh件的评估得出了极的结果。在2019910月对评估范围进行了32天的究之Cure536libssh件基本上是安全的,基本险。同时工作显示了所有范围包的洞,表明libssh软件人员可以和部署一些改进和更粒度的方法。

值得注意的是Mozilla MOSS 项目的慷慨使这项libssh团队整个测试过中的出色准备和可用性Cure53能够效地处理代库,提供并接收面的反馈

功能很大,攻击面也很,但是Cure53发现libssh代码非常干净易于理解和审。在这个领域中只有一例外,即对于 libssh 的状态机该状态机已经了该目的漏洞。这次评估中,Cure53费了相当大的力来审核遍布整个源代的可。尽Cure53团队普遍认为经安全地了状机,仍然烈建议设计并提供一个理和集中的重写

乍一现的了四个问题的数量似相当。然,研究果必在上文中读,得注意的,风的聚仍然致相低的界得。绝大数问必须评估小的影响不的错误。尽管如此,还有一些值得关注的发现比如通过scp进行命以及在密解析可以用的双重释放。虽然些发对攻击来说一个以攻的目,但特别值得修正,因为主要的用程序不安全地实现了致这个缺陷的场景。

之外,Cure53还发现DOS问题,这些题主要是一些未进行过滤的码模式造经确定libssh斥着查的调用整数号混淆。Cure53烈建议仔检查所有 Semmle 查询并一个修复些错以免它们在将来导致际的可利

libsshCure53在审时并重的问题。几 UI(SSH-01-009中记录的RFC4255除外)都符合标准libssh使的密码原语是可靠的,够抵抗侧信道攻击。但,我们发现了个协级别的小问(请参阅 SSH-01-010),这问题与已弃用的哈希数的使用有关。应该注的是,这问题不是特定于libssh破坏与其他SSH客户端下很可能法避。因,我鼓励所有SSH之间调,缓解这问题最后在本文中Cure53描述了在 Curve25519 原语实现点验证的方案。之以这样做是为避免些问,这问题能是效的且重的,由于这次计施的时限制及错综复杂的程度而法得到充分证实。

总而言之,Cure53团队对libssh软件的印象非常好。需要对开发小组表示赞扬,并适用于从筹备阶段开始并包括沟通和后续工作的整个审计过程。显然,在libssh码库中可发现一些bug全问题,Cure53试软件的可靠性和编写良代码体上有信。至重要是,录在的问可以相容易解决掉,特别是在不可能出现危及整个库的重大逻辑错误的情况下。最后,在20199月至10月的评估期libssh被评估为安全的。

Cure53 Mozilla JochaiBen-Avie前和期间所做的出色项目协调和协工作。Cure53 谢红公司烈亚·施耐以及队,们为这任务提供了宝贵的意见建议。

本文翻译自:https://cure53.de/pentest-report_libssh.pdf如若转载,请注明原文地址:
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论