17611538698
info@21cto.com

21岁波兰女子修复了一个存在了20年的Linux漏洞

安全 0 16 16小时前
图片

导读:本文讲述的一个女孩子,她并没有刻意去寻找漏洞。她只是在做一件很普通和平常的事情,却意外发现了问题并解决了它。我们需要更多这样的正能量故事。

请大家注意,这并不是 Linux 内核中的一个 bug,而是 Enlightenment 窗口管理器 E16 自 2006 年以来存在的一个老 bug,当时的卡米拉·谢夫奇克(Kamila Szewczyk) 还不到一岁。

而如今的卡米拉已经21岁,她是德国萨尔兰大学的研究生。她每天开着一辆比她大多数同学都老的窗式汽车,光这一点就挺有意思。

但更令人惊讶的是,她使用Linux操作系统,还深入研究了它几十年前的代码库,还发现了一个自 2006 年以来就隐藏在那里的错误,并且修复了它。

Enlightenment E16 是什么来头?


图片
 E16 桌面

对于不熟悉的用户来说,需要普及一下——Enlightenment是 Linux 的一款窗口管理器,负责绘制和管理屏幕上的窗口界面。它于 1997 年首次发布,比当今大部分 Linux 用户都要老。Kamila 使用的 E16 版本于 1999 年推出,并迅速以其高度可定制性和出色的视觉效果而闻名,而当时大多数 Linux 桌面环境都更加注重实用性。

Enlightenment 的知名度不如KDE 或 GNOME,甚至连LXDE如今的知名度都更高。但它拥有一小群的忠实用户,在一些小众发行版中也能找到它的身影,例如 Pentoo 或 Bodhi Linux。Bodhi Linux 实际上就使用了 Moksha 作为其默认桌面环境,而 Moksha 正是 Enlightenment 的一个分支。

随着时间的推移,Enlightenment 团队开始使用名为 EFL(Enlightenment Foundation Libraries,启蒙基金会库)的全新模块化框架对项目进行全面重写。这项重写工作耗时十余年,最终于 2012 年 12 月发布,并演变为 E17。E17 从一个简单的窗口管理器发展成为一个功能齐全的桌面环境,具备现代化的合成功能和更完善的硬件支持。

但并非所有人都追赶潮流。一部分社区成员仍坚持使用 E16,继续独立维护和开发它。它现在达到了 1.0 版本里程碑,截至 2024 年,最新版本为 1.0.30。它依然活跃,只是仍低调得多。

而卡米拉同学是那个宁静社区的一员。

意外发现漏洞


她当时并非在查找漏洞,而是在做一件很普通的事:准备她作为研究生教授的课程的讲义幻灯片。她有几个用 LaTeX 排版的 PDF 文件,用 Atril(一款文档查看器)打开其中的一个时,整个电脑桌面死机了。

图片

这并非偶然故障。

系统的卡顿现象多次复现,这既令人沮丧,又让开发者感到一丝兴奋。可复现的 bug 意味着你可以真正追踪到问题的根源。

于是她开始着手调查。

卡米拉在深入研究代码库后,发现导致程序卡死的原因是 E16 处理过长的文件名的方式。
#0  __strcmp_evex ()#1  __imlib_hash_find (hash=0x55bc9c111420, key="\001\001\001\001\001")     object.c:172#2  __imlib_font_cache_glyph_get (fn=..., index=0)                          font_draw.c:30#3  __imlib_font_get_next_glyph (... utf8="Kickoff.pdf — Introduction...")  font_main.c:218#4  __imlib_font_query_advance (...)                                        font_query.c:89#5  imlib_get_text_advance (...)                                            api_text.c:231#6  Efont_extents (...)                                                     text_ift.c:87#7  _ift_TextSize (...)                                                     text_ift.c:156#8  TextstateTextFitMB (ts=..., textwidth_limit=291)                        text.c:350#9  TextstateTextFit (...)                                                  text.c:559#10 TextstateTextDraw (... text="Kickoff.pdf — Introduction...")            text.c:638#11 ITApply (...)                                                           iclass.c:930#12 ITApply (...)                                                           iclass.c:884#13 _BorderWinpartITclassApply (ewin=..., i=2, force=1)                     borders.c:179#14 EwinBorderUpdateInfo (ewin=...)                                         borders.c:300#15 EwinChangesProcess (...)                                                ewins.c:2141#16 EwinEventPropertyNotify (ewin=..., ev=...)                              ewins.c:1438...#21 main (...)                                                              main.c:320

她从源代码中发现,当窗口标题过长需要截断时,负责截断的算法没有迭代次数限制。因此,它会无限循环,最终导致桌面完全卡死。这个漏洞自 2006 年以来就一直潜伏在那里,可能只是在等待某种特定的条件触发。

后来,卡米拉花时间修复了这个问题,并且将修复方案已发布在自己的博客上。后面希望她会向原代码库提交合并请求。

为这个故事很重要


表面上看,这只是一个关于一款鲜为人知的窗口管理器的冷门故事,大多数Linux用户大概一生也不会接触它。但请仔细观察,你会发现它远不止于此。

卡米拉出生于2004年。她修复的那个漏洞在她一两岁时就已经存在。她长大成人后,上了大学,成为了一名研究生以及一名教师,而那个漏洞却一直静静地躺在由少数爱好者维护的代码库中,无人问津。最终,是一位真正将E16作为日常用车的用户偶然发现了它,并出于责任心将其修复。

其实这才是真正的开源精神。

它不涉及大公司、赏金计划或 CVE 漏洞申报,而仅仅是一个人、一台电脑、一个死机的桌面,以及想要弄明白原因的好奇心。

有些人已经维护这个代码库几十年了,有很多用户至今仍在使用它。而且,时不时地,这些用户中会有人发现一些其他人没注意到的问题,默默地改进软件,然后继续他们一天的工作。

这不是一件小事,这才是开源的关键精神所在。

作者:场长

参考:

https://iczelia.net/posts/e16-20-year-old-bug

https://www.theregister.com/2026/04/15/enlightenment_e16_bug_patched

评论

我要赞赏作者

请扫描二维码,使用微信支付哦。

分享到微信