<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    CVE-2020-25223-Sophos UTM WebAdmin 遠程命令執行漏洞分析

    VSole2021-10-09 20:37:41

    漏洞概述

    Sophos公司創建于1985年,致力于提供最好的IT安全及數據保護。其產品 Sophos UTM 9 在2020年9月被披露存在遠程命令執行漏洞:

    官方通報
    https://community.sophos.com/b/security-blog/posts/advisory-resolved-rce-in-sg-utm-webadmin-cve-2020-25223


    影響版本:before v9.705 MR5, v9.607 MR7, and v9.511 MR11。

    環境搭建

    從官方網站下載固件,是一個完整打包好的ISO文件,直接使用 VMware Workstation 安裝,然后通過`https://192.168.247.200:4444/`即可訪問UTM頁面。

    Sophos UTM 默認不允許 ssh 訪問,必須在 `Dashboard - Management - System Settings - Shell Access` 中進行開啟,并勾選 `“Allow password authentication”`。

    然后就可以通過 shell 登錄,查看底層文件系統:

    固件提取

    Sophos UTM 9 的主體處理程序是 `/var/sec/chroot-httpd/var/webadmin/webadmin.plx`,借助 IDA Pro 工具可以快速確定該文件是 Perl 腳本使用 PerlAPP 工具編譯得到的 ELF 文件。

    # file /var/sec/chroot-httpd/var/webadmin/webadmin.plx
    /var/sec/chroot-httpd/var/webadmin/webadmin.plx: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), stripped
    

    如何反編譯 Perl ELF 文件,網絡上沒有任何有價值的信息。但 Justin Kennedy 在其文章中介紹了如何反編譯 `webadmin.plx`:

    #!/bin/bash
    # usage: bfs_extract.sh webadmin.plx extracted/
    
    python3 ./yank.py $1 stage1-$1
    python3 ./bfs.py stage1-$1 stage2-$1
    python3 ./bfs_extract.py stage2-$1 $2
    

    其中,`bsf.py` 和 `bfs_extract.py` 腳本可從以下鏈接獲取:

    bsf.py 和 bfs_extract.py
    https://github.com/the6p4c/bfs_extract
    

    `yank.py` 腳本可從 `Justin Kennedy` 文章獲取。但我們發現,該方法只能夠正常反編譯`webadmin.plx`,對其他 `.plx` 文件會出錯,需要對 `bsf.py` 腳本進行如下修改才能使用所有 `.plx `文件。

    with open(sys.argv[1], 'rb') as f, open(sys.argv[2], 'wb') as f2:
    --    header = f.read(4 * 4)
    ++    header = f.read(4 * 3 + 2)
    --    sig, unk, size, data_offset = struct.unpack('<IIII', header)
    ++    sig, unk, size, data_offset = struct.unpack('<IIIH', header)
    ++    dataoffset =  dataoffset & 0xFFFF
    

    至此,能夠完整獲取 Sophos UTM 9 的 Perl 源代碼,從而支撐后續的代碼審計和漏洞挖掘分析。

    漏洞分析

    通過版本比對發現,新版本代碼在 `switch_session` 子例程中對 `$sid` 增加檢查,確保`$sid`不包含字母數字以外的任何其他字符。所以漏洞應該是和`$sid`有關。


    進行源碼審計,澄清`$sid`的傳遞過程:

    1. webadmin.plx/asg.plx:
    $sys->do_connect($config->{backend_address}, $req->{SID}) : undef;
    ↓
    2. webadmin.plx/wfe/asg/modules/asg_connector.pm: ( sub do_connect )
    return $self->switch_session(@_);
    ↓
    3. webadmin.plx/wfe/asg/modules/asg_connector.pm: ( sub switch_session )
    unless( $self->connect() ) {
    ↓
    4. webadmin.plx/Astaro/ConfdPlRPC.pm: ( sub connect )
    return $self->{sys} if $self->_login();
    ↓
    5. confd.plx/sys.pm: ( sub new )
    # Find out who we are
    if( defined $options->{username} && defined $options->{password} && $options->{ip} ){
        # ...
    } elsif( $options->{SID} && $options->{ip} ){
        # Attempt to instantiate from existing session.
        my $pickup = Astaro::file::read_storage("$config::session_dir/$options->{SID}");
        # ...
    }
    ↓
    6. webadmin.plx/Astaro/file.pm: ( sub read_storage )
    eval { local $SIG{'__DIE__'}; $href = Storable::lock_retrieve($file); };
    ↓
    7. webadmin.plx/Storable.pm: ( sub lock_retrieve )
    _retrieve($_[0], 1);
    ↓
    8. webadmin.plx/Storable.pm: ( sub _retrieve )
    open(FILE, $file) || logcroak "can't open $file: $!";
    

    可以看到,前端發送攜帶 `SID` 值的請求,與后端 confd 建立連接,confd 首先會檢查 `$config::session_dir` 目錄中是否存在名稱為 `$options->{SID}` 的文件(檢查該 session id 是否有效)。

    很顯然,上述過程將用戶可控的 `SID` 值直接作為 `open()` 函數的第二個參數,從而導致命令注入!

    通過閱讀 `webadmin.plx/asg.plx` 源碼,可以發現,共有三個地方調用 `do_connect()` 函數,因此最多有三種方式可以觸發漏洞。

    0x01 通過terminate功能觸發

    源碼:

    if( edv( $req, 'terminate' ) ) {
        # ...
        $SID = $sys ? $sys->do_connect($config->{backend_address}, $req->{SID}) : undef;
        # ...
    }
    

    POC就不放出來了。

    0x02 通過POST請求觸發

    源碼:

    if ( $ENV{'REQUEST_METHOD'} eq 'POST' ) {
        # ...
        $SID = $sys ? $sys->do_connect($config->{backend_address}, $req->{SID}) : undef;
        # ...
    }
    

    0x03 通過GET請求觸發

    源碼:

    if ( edv( \%ENV, 'HTTP_COOKIE' ) ) {
        foreach my $cookie (split /\; /,$ENV{HTTP_COOKIE}) {
          $cookies->{$1} = $2 if $cookie =~ /^(.+?)\=(.+)$/;
        }
    }
    # ...
    # GET request
    if ( $ENV{REQUEST_URI} =~ /^\/var\/(.+)/ ) {
        my $path = $ENV{REQUEST_URI};
        $path =~ s/^\///;
        $path =~ s/\%([A-Fa-f0-9]{2})/chr(hex($1))/eg;
        $path =~ s/(rrd-images[a-zA-Z0-9\/_\.]+\.png)(\?[0-9]+)/$1/ig; # removing timestamp information for path checking of rrd-images
        if ( -e $path ) {
            if ( $cookies->{SID} and ( $cookies->{SID} eq $SID or $SID = $sys->do_connect($config->{backend_address}, $cookies->{SID}) ) ) {
                # accept request
                # ...
            }
        }
    }
    

    修復方式

    在新版本的Sophos UTM固件之中,`webadmin.plx/wfe/asg/modules/asg_connector.pm` 腳本增加了對 SID 值的檢查,不允許非字母數字的其他任何字符存在,漏洞不再有效。

    參考

    https://community.sophos.com/b/security-blog/posts/advisory-resolved-rce-in-sg-utm-webadmin-cve-2020-25223

    https://www.atredis.com/blog/2021/8/18/sophos-utm-cve-2020-25223

    https://github.com/the6p4c/bfs_extract

    漏洞漏洞挖掘
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    src漏洞挖掘淺談
    2023-02-20 11:22:13
    信息收集就說到這里,信息收集的主要目的就是擴大可利用面,10000萬個資產你可能碰到弱口令,但1個資產你肯定沒有弱口令挖掘前篇前邊已經講了信息收集,在測試前為了能高效的挖掘src,就需要有數據進行測試,這個數據就是我們常說的字典,字典怎么來,整理,收集,經驗,積累。金額,數量都是可以篡改的地方小結挖掘src漏洞最主要還是挖掘邏輯漏洞,無非就是耐心,細節,多留意數據包的可疑數據,數據包所實現的功能。
    首先要上分那么一定是批量刷漏洞,不然不可能上得了分的,然后呢,既然要批量刷漏洞。兩種思路:1.審計通用性漏洞2.用大佬已公布的漏洞思路1難度較大,耗時也較長。思路2難度適中,就是需要寫腳本或者使用別人已經寫好的腳本。這是泛微繼與微信企業號合作后,又一個社交化管理平臺的落地成果。簡單的說,一般比較大的企業都會用這個平臺來做一些釘釘或者微信接口對接泛微OA的功能。
    關于漏洞的基礎知識
    2022-07-20 09:44:23
    黑客可以通過修改事件完成的順序來改變應用的行為。所以,進行有效的驗證是安全處理文件的重要保證。這種類型的漏洞有可能是編程人員在編寫程序時,因為程序的邏輯設計不合理或者錯誤而造成的程序邏輯漏洞。這種類型的漏洞最典型的是緩沖區溢出漏洞,它也是被黑客利用得最多的一種類型的漏洞
    網絡安全漏洞(以下簡稱“漏洞”)作為信息通信網絡中在硬件、軟件、協議的具體實現或系統安全策略上存在的缺陷,隨著經濟社會信息化、網絡化、數字化和智能化程度的加深,對國家網絡安全的影響也日益加劇。世界各主要國家和組織為了切實提升國家網絡安全防護能力,圍繞漏洞的研究、收集和利用,紛紛建立國家級漏洞通報平臺或漏洞數據庫。日本于2003年開始建設“日本漏洞通報”(JVN)平臺;美國于 2005 年開始建設“
    細說從0開始挖掘cms-
    2022-08-17 16:26:57
    確立目標挖洞的第一步首先是確立一個目標,也就是找個cms來挖,這里可以通過github,gitee或者谷歌百度直接去搜cms。或者cnvd查看相應的信息,通過查看相應的信息可以提高我們挖洞的效率,我們從中可以知道該項目已經存在漏洞,我們到時候挖就可以看看相應的地方會不會還存在漏洞或者避免挖到別人挖過的漏洞。本次挖掘漏洞是ofcms,首先先下載一下源碼,然后解壓丟一邊,回到網頁來看一下項目文檔。
    最后對響應的匹配,使用正則識別id命令之后的結果。成功掃描出CVE-2022-1388F5 BIG-IP API Unauthenticated RCE漏洞漏洞的請求也變異無誤,最后的響應中也是執行了id命令。案例二:利用Scalpel工具挖掘多個0day漏洞Scalpel工具使用較為靈活,通過對檢測目標變異響應的check,可以發現檢測目標中未知的安全問題。同時發現某Apache開源項目的CVE漏洞,報告被該團隊接受并正在修復,尚未披露。
    攻擊者可在無需認證的情況下,通過構造特殊的請求,觸發反序列化,從而執行任意代碼,接管運行ForgeRock AM的服務器。本文從漏洞挖掘的角度分析其中的技術細節,也將公開一些其他的反序列化點。
    對于公益SRC來說,想要沖榜就不能在一個站上浪費大量時間,公益SRC對洞的質量要求不高,所以只要 花時間,還是可以上榜的。在對某站點進行測試SQL注入的時候,先通過一些方式測試是否可能存在漏洞,然后可以直接sqlmap一把梭,也可以手工測試,然后提交漏洞。任意注冊算是低危漏洞,不過也有兩分。不管是進行SRC漏洞挖掘,還是做項目進行滲透測試,又或者是打紅藍對抗,一定要做好信息收集。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类