對Spring framwrok 3.1.1 修復(fù)RDF缺陷(CVE-2015-5211及CVE-2020-5421)的全過程

方案探索過程

隨著CVE-2020-5421的公布,一直使用Spring framwwork老版本的系統(tǒng)突然發(fā)現(xiàn)面臨著窘境乍赫,Spring 開源社區(qū)公布的四個修復(fù)漏洞的版本陆蟆,只是對針對仍在維護(hù)的分支的,在這幾個分支上的版本可以通過順滑升級解決問題改鲫,但對那些已經(jīng)停止維護(hù)的分支比如3.1.x ,3.2.x..則需要使用者自己來解決這個問題林束。而做大幅度跨版本的升級一定會面臨不可盡知的兼容性問題,在緊迫的限期交付補(bǔ)丁包的壓力下缕题,真不知道最終交付的是"安全補(bǔ)丁"還是""連環(huán)雷的引信"胖腾。
自己對在使用的版本進(jìn)行對應(yīng)修改雖然可以用簡單的一句話輕飄飄的來概況:找到對應(yīng)的修改,然后移植到自己用的版本上胸嘁。但每一步的實現(xiàn),都還需要付出沉重的努力群井。特別是在漏洞被公開后毫胜,負(fù)責(zé)安全的部門也只是根據(jù)公開信息落實責(zé)任,對該漏洞的詳情也僅限于網(wǎng)絡(luò)上的有限知識荐吉,在向這些專業(yè)人士咨詢后也發(fā)現(xiàn)口渔,對該問題只是簡單通報苹威,對再現(xiàn)和驗證連可操作性的說明也沒有,對可見的修改方案就更不要奢望了浮声。在經(jīng)過:忙亂根竿,急躁,沉靜知举,深思后,我們規(guī)避了最激進(jìn)的方案逛钻,以盡量小的修改來解決這個問題遮糖,為此也分成兩個方案叠赐,一個是無跨度,即在當(dāng)前版本(V3.1.1)上進(jìn)行修改赛不;一個是最小跨度罢洲,即找到一個最近版本的較解決完善的版本踢故,在上面做修改, 經(jīng)查看版本更新歷史發(fā)現(xiàn)在v3.2.15上已經(jīng)修復(fù)CVE-2015-5211, 只要再修補(bǔ)CVE-2020-5421即可惹苗,選擇把它作為了這個最接近版本來用。具體的工作情況在下面做了記敘淋纲,以防遺忘院究,也為了給解決類似問題一點參考。

方案一:

構(gòu)建3.1.1

這個工作也不是一帆風(fēng)順伙窃,限于環(huán)境的差異及網(wǎng)絡(luò)的不通暢,也消耗了超出預(yù)料的時間样漆。這個過程在單獨(dú)的過程中做了記錄,參見對Spring framwrok 3.1.1 進(jìn)行構(gòu)建

探索修改內(nèi)容

在構(gòu)建的同時還在通過代碼提交歷史及閱讀代碼定位關(guān)于CVE-2015-5211和CVE-2020-5421兩次修改相關(guān)的提交鳍怨,這個過程也是"拔起蘿卜帶起泥",本想盡量留用社區(qū)的修改代碼窿冯,但確實版本的變化涉及了功能的增加确徙,而修補(bǔ)又是在功能添加的基礎(chǔ)上的,大有無限蔓延的架勢鄙皇。如果不做取舍也就陷入了泥潭,難免要大動干戈缠沈,看到這個結(jié)果也幾臨崩潰到要放棄错蝴。好在及時的扭轉(zhuǎn)念頭,做了"斷舍離"柬赐,終于將修改內(nèi)容圈定在了閉合的范圍內(nèi)官紫。

修改 CVE-2015-5211

為避免在文中出現(xiàn)太多代碼肛宋,請參見補(bǔ)丁提交記錄Protect against RFD exploits

修改 CVE-2015-5211

請參考補(bǔ)丁提交記錄Avoid unnecessary parsing of path params

形成的的補(bǔ)丁代碼

最終要做的修改在這里已經(jīng)敘述過了CVE-2020-5421 的修復(fù)方法說明束世,本文只側(cè)重整體過程的記敘和總結(jié),最終結(jié)果在這里了沉帮,可以結(jié)合下文查看和使用代碼補(bǔ)丁文件薪丁。

在修改后提交記錄上生成patch

git format-patch -1 <commitId>

如果要使用該patch, 可以下載patch 文件后可在基于3.1.1.RELEASE 標(biāo)簽建立的分支打上補(bǔ)丁,過程如下

# 基于標(biāo)簽v3.1.1.RELEASE 建立分支
git branch v3.1.1.clone v3.1.1.RELEASE

# 切換分支
git checkout v3.1.1.clone

# 在新建分支上打上補(bǔ)丁
git apply <patchfile>

# 構(gòu)建或繼續(xù)進(jìn)行修改
...

方案二

這個方案里粱檀,最擔(dān)心的是版本的兼容性問題漫玄,在未做任何修改的情況下把升級為3.2.15進(jìn)行測試压彭,果然很快遇到了問題渗常。因為我們對spring框架做過擴(kuò)展,對rest的相關(guān)的json序列化進(jìn)行過處理询一,而3.2.x和3.1.x在對http 消息轉(zhuǎn)換的處理上 存在差別,導(dǎo)致出現(xiàn)了異常健蕊。雖然定位到了問題踢俄,但是否還有類似問題?是否能在非常有限時間里發(fā)現(xiàn)和解決都办,這顯然是有很大的不確定性。

隨想

隨著方案一的修改的完成琳钉,最終選用了的方案一作為本次補(bǔ)丁的應(yīng)對之策。但這應(yīng)該認(rèn)識到這只限于對本次的問題在有限的時間內(nèi)應(yīng)對是最優(yōu)的方法槽卫,并不是系統(tǒng)性的最優(yōu)胰蝠,出現(xiàn)開始描述的窘境的原因是因為日積月累欠下的"技術(shù)債",既然系統(tǒng)還在生命周期內(nèi)躲庄,尚未有明確的下線日期钾虐,為避免這樣的窘境噪窘,就應(yīng)該在日常的工作中有組件升級的安排效扫。這正如對你的愛車的保養(yǎng),做保養(yǎng)時看似多余浩习,但如果從不做養(yǎng)護(hù)济丘,到問題發(fā)生時可能的后果就是你不能承受的洽蛀。

回頭看時疟赊,都是很簡單的事情郊供,直接按照以上步驟進(jìn)行修改近哟,可能在兩個小時內(nèi)就能完成吉执。但正如軟件生產(chǎn)的成本和傳播成本的差異,復(fù)制粘貼很快就能完成鼠证,走直路也永遠(yuǎn)都是快樂的,但如果你未經(jīng)過對問題的一頭霧水适掰,對多個方案的思考和對比荠列,對每個步驟的不確定性的體驗,你不會知道费就,所謂的直路都是經(jīng)歷過的人給你做過路標(biāo)才是可能有的川队。

假如類似問題再次來臨,還是要遵守事情的規(guī)律眠蚂,做到不急不燥斗躏,同時大膽心細(xì),在對問題做深入分析的基礎(chǔ)上完成修改笛臣,且對形成問題的復(fù)現(xiàn)及檢測的有效方法要充分重視隧饼,這是開發(fā)方與安全檢測方必須達(dá)成一致后才能關(guān)閉問題的核心點。

當(dāng)然踱蛀,作為重點最后重復(fù)一遍:從長久來看,及時的技術(shù)升級是避免出現(xiàn)窘境的根本崩泡,特別是對于對技術(shù)進(jìn)行集中管控的組織猬膨,業(yè)務(wù)應(yīng)用開發(fā)者使用了組織內(nèi)定制和擴(kuò)展后的開源組件,集中管控方要主動推動業(yè)務(wù)項目組的組件升級勃痴,這也是集中管控的重要作用沛申。

[前一篇]CVE-2020-5421 的修復(fù)方法說明
[后一篇]對Spring framwrok 3.1.1 進(jìn)行構(gòu)建

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铁材,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子著觉,更是在濱河造成了極大的恐慌饼丘,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卫病,死亡現(xiàn)場離奇詭異贴捡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門汛骂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來评腺,“玉大人,你說我怎么就攤上這事蝶念。” “怎么了担敌?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵廷蓉,是天一觀的道長。 經(jīng)常有香客問我刹悴,道長攒暇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任恒削,我火速辦了婚禮尾序,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘携丁。我一直安慰自己兰怠,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著秸侣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪椭坚。 梳的紋絲不亂的頭發(fā)上搏色,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天善茎,我揣著相機(jī)與錄音,去河邊找鬼频轿。 笑死垂涯,一個胖子當(dāng)著我的面吹牛烁焙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耕赘,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼骄蝇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鞠苟?” 一聲冷哼從身側(cè)響起乞榨,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎当娱,沒想到半個月后吃既,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡跨细,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了冀惭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片震叙。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖散休,靈堂內(nèi)的尸體忽然破棺而出媒楼,到底是詐尸還是另有隱情,我是刑警寧澤戚丸,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布划址,位于F島的核電站,受9級特大地震影響限府,放射性物質(zhì)發(fā)生泄漏夺颤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一胁勺、第九天 我趴在偏房一處隱蔽的房頂上張望世澜。 院中可真熱鬧,春花似錦署穗、人聲如沸寥裂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抚恒。三九已至,卻和暖如春络拌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背回溺。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工春贸, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留混萝,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓萍恕,卻偏偏與公主長得像逸嘀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子允粤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353