2016-10-02 49 views
2

的Maven允許開發者有其假象依賴於古文物的老10歲(如公共-EL:公地-EL:1.0在2005年發佈,或碼頭:的javax.servlet:5.1.11發佈在2007年)。 Java生態系統中的慣例似乎依賴於特定的舊版本的構件,因爲它們的更新通常會靜默破壞API。安全過時的行家文物

進行修補那些古老的文物,如果一個安全漏洞被發現?誰來照顧這個?

如果我拉進來,說spark org.apache.spark的最新版本:火花core_2.11:2.0.0,下載Maven的依賴項3GiB後,我可以看到他們夫婦於2005年更老。如果產生的spark被執行,那些過時的依賴會暴露出嚴重的安全漏洞嗎?

注意:這不是關於security of java本身,也不是security of maven,但maven交付的文物。

+0

特別要注意的是,許多「過時的」軟件包(例如'javax.servlet')實際上是API軟件包,其中的底層實現可能是最近的。 – chrylis

+0

@chrylis,謝謝你指出。我使用了一些10年前的極端例子來證明我的觀點。如果我們尋找5歲的人,那麼會有更多的過時(意味着:更多的新版本可用)非瑣碎的工件。 – heroxbd

回答

2

Maven的中央資料庫requirements不講傳遞相關的安全問題。

更新傳遞依賴的責任是對依賴的所有者依賴。依賴關係的所有者/維護者需要在更新其依賴關係(具有安全缺陷的依賴關係)時,針對其代碼庫中導致的問題實施任何修補程序。

由於在應用程序的依賴性可能有不安全的傳遞依賴的用戶,你有幾種選擇:

  • 更新的依賴的最新版本,依賴主人可能已經實施了修復。
  • 排除不安全的傳遞依賴。請自擔風險,因爲這可能會產生意想不到的影響。通常這是可行的,因爲不安全的依賴可能實際上不會被您需要的依賴使用。
  • 叉的依賴的代碼庫,更新不安全的傳遞依賴,解決任何問題,並提交pull請求。

另外,如果你想在你的Java應用程序上依賴的安全性的詳細報告,你可以檢查出OWASP Dependency Checker,檢查項目的依賴關係(包括傳遞)對NIST NVD數據庫。

+0

我最近使用了OWASP依賴檢查程序,但我得到的印象是反序列化漏洞(請參閱例如[NotSoSerial](https://github.com/kantega/notsoserial))未涉及。你碰巧知道這是否屬實?不過,您可以使用FindBugs [檢查漏洞](http://blog.h3xstream.com/2016/01/deserialization-vulnerability.html)。 – vanOekel

+1

依賴檢查程序檢查NIST國家漏洞數據庫。依賴關係中的缺陷需要報告給NVD以包含在依賴關係檢查器報告中。以下是他們對[反序列化]的看法(https://web.nvd.nist.gov/view/vuln/search-results?query=deserialization&search_type=all&cves=on)。反序列化也在[CWE](http://cwe.mitre.org/data/definitions/502.html)中定義,它們用於定義漏洞。 – WithoutRemorse

+1

不知道OWASP,謝謝你的信息! – heroxbd

1

如果安全漏洞是在一個特定的包發現,預期的是,一個新的修補版本由作者出版。就你而言,較老的易受攻擊的版本仍保留在Maven Central中,初看起來這似乎是一件非常糟糕的事情。

這導致了以下明顯的問題:

  • 爲什麼沒人修補這些漏洞版本?
  • 爲什麼有人刪除這些易受攻擊的版本?

讓我們探索的後果....

如果有人正在改變,我使用一個庫版本,如何可我知道,代碼仍然功能一樣嗎?這就是爲什麼補丁被作爲新版本處理的原因。對作者來說這是一個很少的工作。

因此,如果舊的易受攻擊的版本沒有被修補,那麼它們肯定應該被刪除?那麼......如果用戶不想使用庫的最新補丁版本,因爲擔心會破壞他們的代碼,如果有人刪除了他們依賴的庫版本,他們肯定會同樣不高興...... 。如果你這樣做,該死的,如果你不這樣做,該死的......

所以最後這是一個用戶小心的情況。我們都需要管理我們的依賴關係,並適應各種底層API的變化。如果我們忽略更改,我們就有遭受漏洞攻擊的風險,無法升級。歡迎來到軟件開發:-)

+0

謝謝,您的意見讓我意識到,maven不能代替GNU/Linux和UNIX發行版的軟件包管理器,安全團隊將所有軟件包視爲一個整體。 Maven更加分散。 – heroxbd

+0

確實。但是它們有兩種不同的用例。 Maven用於構建隨後打包的軟件,以便在您選擇的操作系統上進行分發。所以你是正確的,它是維護你安全的值得工作的軟件包維護者。 –