最近,有朋友不断地向我提及,开源软件协议通常会表明作者不对用户使用该开源软件所造成的任何问题负责。但是呢,这种协议约定在我们国内是不成立的,因为开源软件作者在中国应该严格遵循《网络安全法》和《网络产品安全漏洞管理规定》的相关要求,如果开源软件被发现了漏洞,应该及时进行修补,如果不采取任何措施,那么在中国现行法律法规的要求下,这种行为就是违法的。那么,这样的解读或理解是正确的么?
从我个人的观点来分析,如果单纯的认为开源软件作者负有漏洞修补责任的说法是过于简单化了,或者说是错误的解读了我国在网络安全方面的法律和法规。在实际责任判定方面,开源软件的安全漏洞修补责任应该根据开源软件实际使用的情况来进行分析。
如果我们把实际参与到开源生态的各个相关方角色进行分类的话,大致可以分为以下5种:
角色1.“单纯”贡献代码的开源软件作者。这里的单纯,是指仅贡献自己的“知识智慧”,把自己的代码无偿公开出来供大家自由使用。
角色2.具备商业运营成分的开源软件作者。作者公开自己的代码和程序是为了扩大自己软件的受众,除了提供一部分免费版本之外,还设立了企业版、旗舰版等相关产品(付费服务版)。这里的作者既可以是个人,也可以是社区,或者公司企业。
角色3.开源社区或代码托管平台。为开源代码提供统一管理服务,方便用户和相关方及时获取最新和最有价值的开源代码。
角色4.商业软件公司和系统集成公司。在对外提供的商业软件产品和集成服务中打包使用了网上公开的开源软件代码。
角色5.使用开源代码的用户单位,或者按照《网络安全法》中的说法,叫做网络运营者。在搭建的业务系统中,自身采用了网上公开的开源软件代码,相关业务系统在公司内部或者对外提供服务。
除了上述角色之外,我们在厘定相关方责任的情况下,也要进一步分析现行法律法规关于责任对象的界定:
第二十二条:网络产品、服务应当符合相关国家标准的强制性要求。网络产品、服务的提供者不得设置恶意程序;发现其网络产品、服务存在安全缺陷、漏洞等风险时,应当立即采取补救措施,按照规定及时告知用户并向有关主管部门报告。
网络产品、服务的提供者应当为其产品、服务持续提供安全维护;在规定或者当事人约定的期限内,不得终止提供安全维护。
网络产品、服务具有收集用户信息功能的,其提供者应当向用户明示并取得同意;涉及用户个人信息的,还应当遵守本法和有关法律、行政法规关于个人信息保护的规定。
上述条款中,所提出的对象限定在“网络产品、服务”。
那么根据《中华人民共和国产品质量法》中关于“产品”的定义是“产品是指经过加工、制作,用于销售的产品。”
以该角度来进行分析和判断,上述的角色1和角色3是不用承担法律责任的,仅仅需要遵循开源业界的道德责任。角色2、角色4和角色5应承担法律责任,并且应当参照《网络产品安全漏洞管理规定》第七条
“网络产品提供者应当履行下列网络产品安全漏洞管理义务,确保其产品安全漏洞得到及时修补和合理发布,并指导支持产品用户采取防范措施:
(一)发现或者获知所提供网络产品存在安全漏洞后,应当立即采取措施并组织对安全漏洞进行验证,评估安全漏洞的危害程度和影响范围;对属于其上游产品或者组件存在的安全漏洞,应当立即通知相关产品提供者。
(二)应当在2日内向工业和信息化部网络安全威胁和漏洞信息共享平台报送相关漏洞信息。报送内容应当包括存在网络产品安全漏洞的产品名称、型号、版本以及漏洞的技术特点、危害和影响范围等。
(三)应当及时组织对网络产品安全漏洞进行修补,对于需要产品用户(含下游厂商)采取软件、固件升级等措施的,应当及时将网络产品安全漏洞风险及修补方式告知可能受影响的产品用户,并提供必要的技术支持。……”
和第八条
“网络运营者发现或者获知其网络、信息系统及其设备存在安全漏洞后,应当立即采取措施,及时对安全漏洞进行验证并完成修补。”的相关要求完成漏洞修补工作。角色1-5的相关责任如下表所示。
角色 | 道德责任 | 法律责任 |
角色1.“单纯”贡献代码的开源软件作者 | 及时完成漏洞修复,发布安全补丁或更新 | / |
角色2.具备开源商业运营的开源软件作者 | / | 严格遵守《网络产品安全漏洞管理规定》第七条的相关规定 |
角色3.开源社区或代码托管平台 | 发布安全提示,告知代码维护方、使用方进行漏洞修补 | / |
角色4.商业软件公司和系统集成公司 | / | 严格遵守《网络产品安全漏洞管理规定》第七条的相关规定 |
角色5.使用开源代码的用户单位 | / | 严格遵守《网络产品安全漏洞管理规定》第八条的相关规定 |
所以,判定开源软件相关方是否应承担漏洞修补责任,还应考虑所提供的内容是否属于“产品”的概念。
单纯的去抠字面意思可能让大家很难理解,结合具体场景,本文尝试做一下具体的分析:
这种是属于比较理想的场景,当开源软件A被爆出存在安全漏洞时,角色1积极承担了漏洞修补的责任,角色3同步发布了安全提示,告知代码维护方、使用方进行漏洞修补。作为使用开软软件α的角色2、角色4和角色5仅需要下载最新的开源代码即可完成修补工作,这个从法律层面就算是落实了相应的责任义务。
即当开源软件β被爆出安全漏洞时,角色1未能及时修复安全漏洞,角色3也没有及时同步告知安全提示,或者协调发布相关安全建议。那么,
作为角色2,对外提供的具有商业属性的企业版、旗舰版相关产品应该承担漏洞修补责任,并严格遵守《网络产品安全漏洞管理规定》第七条的相关规定。
作为角色4,商业软件中包含了相关代码且具有商业属性的产品也应该承担漏洞修补责任,并严格遵守《网络产品安全漏洞管理规定》第七条的相关规定。修复漏洞的方式可以是换一个别的、安全的、免费的代码接着用,或者采取其他的防护措施,而不应该以开源软件作者未更新、未发布安全补丁为由拖延和拒不修补安全漏洞。
作为角色5,自身在建平台中包含了相关代码。角色5这时候不是网络产品提供者,而是网络运营者的身份,应严格遵守《网络产品安全漏洞管理规定》第八条的相关规定。修复漏洞的方式可以是换一个别的、安全的、免费的代码接着用,或者采取其他的防护措施,而不应该以开源软件作者未更新、未发布安全补丁为由拖延和拒不修补安全漏洞。而这个也是在实际场景下最容易被人忽视的责任。
有一种情况下,角色1和角色3也是需要法律责任的,那就是发布具有恶意属性的开源代码。关于这部分,法律里明确的说法是:
《网安法》第二十七条 任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供专门用于从事侵入网络、干扰网络正常功能及防护措施、窃取网络数据等危害网络安全活动的程序、工具;明知他人从事危害网络安全的活动的,不得为其提供技术支持、广告推广、支付结算等帮助。
《刑法》第二百八十六条 故意制作、传播计算机病毒等破坏性程序,影响计算机系统正常运行,后果严重的,依照第一款的规定处罚。
《网络产品安全漏洞管理规定》第九条 (四)不得发布或者提供专门用于利用网络产品安全漏洞从事危害网络安全活动的程序和工具。这里对于责任的界定,不仅仅限于“产品”这个范围,而是统一扩大到“程序”这个更广泛的概念。
其实,上述的责任界定也和欧盟即将出台的《网络弹性法案》中关于开源软件的相关方责任也是不谋而合的。具体可以参见《安全内参》“开源软件作者要不要为安全漏洞负责?欧盟官方提出监管新方法 ”https://www.secrss.com/articles/60204
所以,单纯的认为开源软件作者应该负责其实是对我国现行法律法规的一种误读或者片面解读。我国现行的法律法规一直倡导的就是权责相等,在实际的政策环境中也是在积极鼓励开源作者开放创新,积极贡献自己的智慧和力量。而不是有些人所持有的“别人拿开源代码挣钱获取利益,出了安全问题就把作者拉出来背锅,所以国内不适合做开源,大家都应该去国外”这种想法。