我对用gcc/g++/clang编译感到好奇,假设头文件和实现文件是用户提供的,而不是构建配置。(即没有cd lib && make)
如果用户可以提供对象文件以链接到too (静态库),怎么办?用户提供的编译器/链接器标志如何?
如果恶意用户能够提交*.cc、*.hh和*.a文件(可能是编译器标志),并让系统编译和链接到一起(但不运行),那么他们甚至可以以这种方式运行系统吗?
发布于 2015-07-01 17:39:36
这不仅是可能的,它已经被记录了好几次在过去。
http://www.cvedetails.com/vulnerability-list/vendor_id-72/产品_id-960/GNU-GCC.html
例如,http://www.cvedetails.com/cve/CVE-2008-1367/显示了一种内存损坏攻击,如果它们被充分利用,可能会导致各种类型的妥协。
编译器和其他程序一样容易受到错误和格式错误输入的影响。
发布于 2015-07-01 14:54:11
至少C++编译是图灵完成的,因此可以/很容易地产生影响系统性能的无限循环,并产生无限输出(耗尽内存和/或磁盘位置)。
关于C++编译如何完成图灵的更多信息:https://stackoverflow.com/questions/189172/c-templates-turing-complete
https://security.stackexchange.com/questions/92852
复制相似问题