題:
顯示版本號是否真的是安全性錯誤配置?
stormtrooper
2019-08-13 13:34:53 UTC
view on stackexchange narkive permalink

我們的Web應用程序使用一個內嵌jQuery的HTML文件。根據jQuery許可證( https://jquery.org/license/),我們必須保留許可證標頭完整,包括版本號。

我們的客戶報告該產品和版本組合的暴露存在安全風險。奇怪的是,沒有將同一文件中的引導程序版本報告為安全隱患。

許多應用程序都使用內部帶有版本號的庫。甚至可以通過在Firebug或Chrome的開發者控制台中運行一些代碼來獲取版本號。

在什麼情況下會出現這種“安全性配置錯誤”( https://www.owasp.org/index。 php / Top_10-2017_A6-Security_Misconfiguration)是否適用於顯示產品和版本號?以及如何在不違反jQuery許可證的情況下解決此問題?

我認為您存在邏輯錯誤,因為信息披露被等同為安全配置錯誤。它們絕不是相同或相關的。
“ *奇怪的是,同一文件中的引導程序版本沒有報告為安全隱患。*”他們可能隨機發現了jQuery版本號並進行了報告。或者他們可能認為,對他們發現的每個版本號進行挑剔是多餘的。或者他們的自動化工具剛剛發現了jQuery。就像軟件永遠不會存在錯誤一樣,因為程序員不會想到每一個極端情況,也不知道每個怪癖(或者可能沒有足夠的時間這樣做),因此滲透測試也是不精確的事情。
從許可證文件中刪除版本號仍然無濟於事,因為攻擊者只能手動檢查您使用的版本。
@MechMK1不會,如果您在某處/任何地方添加無法訪問的代碼(例如`if(true === false){}`)或隨機空格,則其自動匹配器將無法確定地匹配版本。
@MonkeyZeus如果您使用天真的精確匹配,那麼您將是正確的。但是,如果檢查相似度,那麼對jQuery 3.1.7的細微修改仍然看起來像jQuery 3.1.7一樣為99.8%。
@MechMK1已經無數次提及,如果攻擊者專門針對您,那麼這無關緊要,特別是在談論像JS這樣的發送給客戶端的代碼時,但是如果您只是想避免腳本小子,那麼即使是一點點晦澀的“幫助”。真正的安全性配置錯誤是使用了易受攻擊的版本。即使您沒有使用易受攻擊的版本,也很難使瀏覽器使用易受攻擊的版本。老實說,如果您的網站由於JS而易受攻擊,那麼從安全角度來看,您在做錯事。
@MonkeyZeus是的,我知道,但這並不是重點。Script Kiddies使用完善的自動化工具,而不是劣質的自行編寫工具。每個基本的webapp分析器都將能夠識別修改後的jQuery版本,因此嘗試對其進行混淆會導致問題,並且不會獲得安全利益。儘管我想知道如何使瀏覽器使用易受攻擊的jQuery版本,但是如果該站點包含的版本沒有任何已知的漏洞。
@MechMK1複製+粘貼+輸入到控制台窗口:`var script = document.createElement('script');script.type ='text / javascript';script.src ='https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js';document.head.appendChild(script);警報(jQuery.fn.jquery);`
花時間嘗試隱藏客戶端庫版本,而不是花時間解決實際的安全問題可能會使您更容易受到攻擊。
@MonkeyZeus是的,但是您只能對自己而不對他人這樣做。例如,您不能使我使用易受攻擊的jQuery版本。
我在https://jquery.org/license/上沒有看到任何指示版本號需要保持完整的指示。它說版權標頭需要……只要您擁有版權2005、2014 jQuery Foundation,Inc.和其他貢獻者;根據MIT許可證發布;我不希望他們會注意。
@ceejayoz如前所述,無論如何都無法幫助您掩蓋該版本。
@MechMK1可以,但是這可以幫助OP擺脫客戶的安全掃描程序。
使掃描儀停止抱怨的@ceejayoz“修復”問題是您可以做的“最糟糕的事情”之一。當然,刪除許可證文件中的版本是不夠的,但這從根本上是錯誤的方法。像這樣的東西就是為什麼Debian PRNG錯誤出現的原因。
@MechMK1只要OP具有jQuery的安全版本,這裡的掃描器結果都是“假陽性”。我不主張掩蓋不安全的版本;我說的是可以以這種方式安全地處理被標記的版本公開。
@ceejayoz是的,的確如此,在這種情況下,我不會看到任何問題。但是我認為,總的來說,最好學習如何將報告標記為誤報,而不是急於執行“修復”。
@MechMK1公平,我可以同意。
五 答案:
Sjoerd
2019-08-13 14:26:25 UTC
view on stackexchange narkive permalink

暴露版本號對安全的影響是,攻擊者可以立即查看您的版本是否容易受到已知漏洞的攻擊。例如,3.4.0之前的jQuery容易受到CVE-2019-11358的攻擊,因此對於攻擊者來說有用的信息是知道您的jQuery是3.3.9還是3.4.1。

但是,使用JavaScript在瀏覽器中運行的完整源代碼可以被攻擊者訪問,因此無法隱藏jQuery是否容易受到攻擊。即使隱藏了版本,攻擊者也可以比較代碼,或者只是嘗試利用漏洞,以確定您是否容易受到攻擊。隱藏版本號可能會使它工作起來稍微多一點,但實際上卻收效甚微。

此外,還有其他方法可以減輕這種情況:您使用的庫中的問題。訂閱郵件列表或其他發布方法以解決安全問題。

  • 一旦發現安全問題,請更新客戶端庫。
  • 如果您始終有安全漏洞因為您需要定期更新版本,所以公開版本是沒有問題的。而且您可以告訴您的客戶,這是減輕信息洩露的方法。

    同意,只需要注意一點:“ *隱藏版本號可能會使它工作起來更多一些*”我認為這比“稍微”多一點:為了將代碼映射回版本號(以便插入代碼CVE搜索中的版本號),您必須擁有所有相關庫的所有版本的所有變體(最小化,也許有不同的包裝器)的索引。如果專門的攻擊者懷疑會存在可利用的漏洞,則可以執行此操作,但是在大多數情況下,客戶端庫的漏洞無法到達或影響有限。我認為很少有攻擊者會打擾。
    @Luc我認為這根本沒用,您可以通過$ .fn.jquery訪問,這比廢棄註釋更容易,而註釋由於SOP可能在大多數資源中是不可讀的。
    @Kaiido不錯,我不知道`$ .fn.jquery`。我不確定這是一個幸運的巧合,還是其他圖書館也有這種情況。查找該庫,我看到的第二常見的是Bootstrap,它[似乎不](https://stackoverflow.com/questions/15335537/how-to-identify-bootstrap-version)有這樣的功能那。
    @Luc,如果您談論的是CSS,那麼不,js沒有可用的功能(註釋)。但是每個引導插件都可以從構造函數訪問其自己的VERSION:https://stackoverflow.com/questions/43233588/how-can-i-get-bootstrap-version-via-javascript
    -1
    @echo有專門設計用於監視第三方組件中漏洞的工具。該領域的兩個商業領導者是當前的Palamida和Black Duck,但是如果您在Google上進行搜索,您可能會找到一系列價格合適的更新產品(有些是免費的,但需要大量的手工工作),這些產品可能會滿足您的需求更好。
    -1
    有人可以向我指出,無論如何客戶端庫本身都是一個漏洞?為了進行任何攻擊,攻擊者需要首先在客戶端執行一些代碼。如果沒有eval(window.location.hash),我看不到在不危害網站的情況下,操縱HTML的庫如何容易受到攻擊。
    schroeder
    2019-08-13 14:26:41 UTC
    view on stackexchange narkive permalink

    知道版本號不是安全錯誤配置。暴露版本號的風險是“信息披露”。如果知道此信息使攻擊者可以利用該特定版本的漏洞進行設計,則可能造成危險。那就是“使用已知漏洞的A9組件”。

    因此,客戶似乎對風險和情況有不正確和僵化的理解。

    Tom
    2019-08-14 09:38:59 UTC
    view on stackexchange narkive permalink

    這是網絡安全中非常古老的思想模式,暴露某些內容的版本號會帶來安全隱患。

    據稱,這會使攻擊者的工作變得更輕鬆,因為如果他們知道版本無論您運行的是什麼,他們都可以查找該版本所應用的漏洞。

    實際上,這就是安全掃描程序正在執行的操作。 Nessus等人具有內置的版本號漏洞數據庫。因此,除非您從不掃描自己,否則隱藏的信息就是將您自己射向腳。一個簡單的strcmp()來確定某些東西的版本號。這需要更多的努力,並且不能總是精確地指出確切的數字,但是沒有任何有價值的攻擊者會混淆jQuery 3.3.0和jQuery 2.2.1

    非腳本兒童級別的攻擊者還有其他從指紋識別到簡單地自動測試數百個漏洞並檢查工作原理的方法。

    隱藏版本號可為您提供很少的額外安全性。如果您無事可做,則可以執行或不執行。只要您有任何實際的安全問題要解決,就花時間在這些問題上。如果您的工具是這樣報告的,請向上游報告該錯誤,以便可以對其進行修復。

    “ *除非您從不掃描自己,否則隱藏[版本號]會讓您無所適從。*“除了有開發該軟件的開發團隊以外。他們知道他們使用的版本,並且可以檢查漏洞。這樣做與對自己運行漏洞掃描一樣罕見(幾乎沒有人這樣做),但是如果您必須選擇一個,我寧願自己檢查版本號,也不願公開給所有人看。是的,有針對性的攻擊者將使用其他方式來獲取信息,但這並不意味著您想使他們或腳本小子都變得容易。
    如果您很容易成為腳本小子的目標,那麼暴露的版本號是最少的問題。我同意開發人員團隊應該檢查是否有傷口,但是您知道嗎?他們不是安全專家,而您卻是。運行掃描有一定的意義,而不是信任開發團隊。理想情況下,您會兩者都**。
    jfran3
    2019-08-13 14:24:10 UTC
    view on stackexchange narkive permalink

    我不確定100%是否是重複問題。如果應該將其標記為此類,請使用mods,但我認為此特定文章“ 是否有沒有XSS漏洞的jQuery基本版本”中的建議對於解決您的客戶的問題。

    在解決這個一般性問題時,您必須評估的主要因素之一是,建議的安全解決方案是否對您的客戶而言是良好的ROI。是否值得在安全策略中寫入異常,或者實施代碼以剝離返回的版本號(或正如註釋者指出的可能拋棄jQuery)以減輕暴露版本號的風險?在許多情況下不是這樣,但在其他情況下會,並且這完全取決於個人情況。但是,您絕對應該通過使用 cvedetails NIST國家漏洞數據庫之類的東西來確保所使用的版本沒有受到損害。

    至於為什麼沒有報告Bootstrap的原因可能是掃描儀(您沒有提到)和您用於評估的測試。根據 OWASP安全性錯誤配置的邏輯,也可以將其視為漏洞,並且出於相同的原因也不應/不應予以解決。無論如何,公開這些信息確實會為任何潛在的攻擊者提供另一個數據點,從該數據點可以進行研究並潛在地識別漏洞。

    rackandboneman
    2019-08-16 00:38:37 UTC
    view on stackexchange narkive permalink

    最後,隱藏它是模糊的安全性。

    這常常被誤導為無用和無用的行為。

    如果是在ITSOWN和AGAINST A上使用的話有針對性的攻擊。

    它可以通過降低仍然在尋找目標的任何人沒有成為目標的機會來增強“適當的”安全措施。

    它將風險降低到最低

    “適當”的安全性就像確保您的行為是合法的,而默默無聞的安全性就像仍然確保您不會誤以為是的,以防萬一您對法律有誤。



    該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 4.0許可。
    Loading...