书中攻击步骤中,对 #!/proc/self/exe 的作用理解存在问题:
5)runc 最后将执行用户通过 docker exec 指定的 /bin/sh,它的内容在第 1 步中已经被替换成 #!/proc/self/exe,因此实际上将执行宿主机上的 runc,而 runc 也已经在第 4 步中被我们覆盖掉了。
#!/proc/self/exe 的作用在这里应该是: 向容器中的监听进程提供一个 non-dumpable 的 runc 进程,以便对其 /proc/<pid>/exe 符号链接解引用,也就是第 3 步成功的前提。
至于最终 shellcode 的执行,需要等待宿主机上下一次执行已被修改的 runc 时直接触发。
https://unit42.paloaltonetworks.com/breaking-docker-via-runc-explaining-cve-2019-5736/