이번 주 LWN.net 위클리 에디션(11월 12일자) 주요 내용이다. Synaptics는 DisplayLink 독을 지원하려던 개인 개발자에게 특허 침해 경고장을 보냈다. 이 개발자는 결국 Rust DRM 드라이버의 커널 제출을 멈췄다. Git 프로젝트는 LLM 기여 정책을 정하려고 투표 절차를 처음으로 검토한다.
보안 쪽 기사는 세 개다. 첫째는 lockdown 상태에서 하이버네이션을 허용하는 TPM 기반 설계다. 둘째는 user namespace에서 CAP_SETFCAP이 새는 경로를 막는 패치다. 셋째는 glibc 동적 링커의 하드닝 tunable이다.
- Synaptics patent claims stop work on DisplayLink drivers — 특허 125건 목록과 주당 2만 5천 달러 청구 경고에 Vino 드라이버 개발이 멈췄다
- Git considers voting to determine its LLM policy — 합의가 안 될 때 쓸 투표 절차부터 합의가 필요하다
- Locking down hibernation for the winter — PCR 5 마커와 TPM 세션 감사로 하이버네이션 이미지에 서명한다
- User namespaces + file capabilities = trouble —
setns(), fd 전달,ptrace()로CAP_SETFCAP을 되찾는 경로를 막는다 - Additional hardening for the glibc dynamic linker — PIE가 아닌 실행 파일을 거부하는
glibc.rtld.require_pie등 tunable 6개 - 짧은 소식: musl 기반 OpenSSH 긴급 수정, 7.4-rc2, Amutable OS 개요, Asahi Linux의 GPL 전환, Firefox 160, Zellij 0.46, 팀 피터스 별세
Synaptics 특허 경고로 멈춘 DisplayLink 드라이버
마이크 로시언(Mike Lothian)은 Dell DisplayLink 독이 리눅스에서 자주 멈추자 직접 드라이버를 만들었다. 이름은 Vino이고, Claude의 도움을 받아 Rust로 쓴 DRM/KMS 드라이버다. 벤더 소프트웨어인 DisplayLink Manager는 x86용 바이너리로만 나온다. 공개된 것은 커널 모듈 EVDI뿐이다.
| 날짜 | 사건 |
|---|---|
| 6월 17일 | dri-devel에 Vino RFC를 올리고 EVDI 저장소에 DL3 제어 평면 질문을 남겼다. 답은 없었다 |
| 7월 20일 | Synaptics가 “DisplayLink는 특허로 보호된다”는 메일을 보냈다 |
| 8월 17일 | 특허 125건 목록과 요구 사항 8개를 담은 중지 요구서(cease-and-desist)를 보냈다 |
| 8월 26일 | 로시언이 Vino v3를 올렸다. DL3 독 3세대를 벤더 소프트웨어 없이 구동한다 |
| 10월 5일 | 영국 특허 GB2484736B, GB2485613B의 클레임 차트와 함께 2만 5천 달러, 이후 주당 2만 5천 달러씩 늘어나는 청구를 경고했다 |
| 10월 23일 | OIN은 코덱이 Linux System Definition에 없어 보호 대상이 아니라고 결론 냈다 |
Synaptics는 OIN 회원사다. 하지만 OIN 정의는 목록에 없는 코덱을 보호 대상에서 뺀다. 로시언은 GitHub 저장소를 내렸고 Vino를 커널에 제출하지 않기로 했다. 댓글에서는 두 특허의 클레임이 1970년대 Haar 변환 압축 같은 선행 기술(prior art)과 겹친다는 지적이 나왔다.
Git의 LLM 정책 투표
Git은 2025년 10월부터 “AI가 생성한 것처럼 보이는 기여는 거부한다”는 정책을 문서에 두었다. 근거는 DCO(Developer’s Certificate of Origin)를 지킬 수 있는지가 불분명하다는 점이다. Git Contributor’s Summit에서 이 정책을 다시 논의했지만, 합의할 수 없다는 점만 합의했다. 그래서 에밀리 섀퍼(Emily Shaffer)가 투표 절차 초안을 10월 21일에 올렸다.
| 항목 | 초안 내용 | 논쟁점 |
|---|---|---|
| 제안 형식 | 문서 패치로 제출. 다른 유권자 1명의 지지(second)가 필요 | – |
| 기간 | 약 4주 토론, 2주 투표 | 집계 방식이 없음. Debian devotee, CIVS가 후보 |
| 투표 자격 | next 브랜치에 머지된 커밋 1개 또는 리뷰 2회 | Summit에서는 커밋 50개 안이 나왔다. 패트릭 슈타인하르트(Patrick Steinhardt)는 25~30개를 제안했다 |
| 공개 여부 | 정하지 않음 | 고용주 압력을 막으려고 비밀 투표가 필요하다는 의견이 나왔다 |
크리스토퍼 하우스박(Kristoffer Haugsbakk)은 기여자 대부분이 AI 회사에 다니므로 결과가 정해져 있다고 주장했다. 슈타인하르트와 브라이언 칼슨(brian m. carlson)은 각자 판단으로 투표하겠다고 반박했다. 토론은 결론 없이 잦아들었다.
lockdown 상태에서 하이버네이션 허용하기
커널은 하이버네이션 이미지가 디스크에서 변조됐는지 알 수 없다. 그래서 lockdown이 켜지면 하이버네이션을 막는다. 매슈 개릿(Matthew Garrett)은 커널만 아는 TPM 키로 이미지에 서명하는 패치를 올렸다. 어려운 부분은 다운그레이드 공격이다. 공격자가 옛 커널로 부팅해 같은 키를 얻으면 이미지를 다시 서명할 수 있다.
| 단계 | 동작 |
|---|---|
| 1 | 새 커널의 EFI 부트 스텁이 PCR 5에 “키 보호 지원” 마커를 넣는다 |
| 2 | 펌웨어가 ExitBootServices()에서 PCR 5를 닫는다(capping). 사용자 공간은 이 마커를 흉내 낼 수 없다 |
| 3 | 커널이 감사(audit)되는 TPM 세션에서 PCR 5 값을 확인하고 서명 키를 만든다 |
| 4 | TPM이 서명한 세션 기록과 함께 이미지를 저장한다 |
| 복원 | 세션 기록 서명, 명령 목록, PCR 5 값, 이미지 서명 키를 차례로 검증한다 |
제임스 보틀리(James Bottomley)는 TPM locality를 쓰면 더 단순하다고 했다. 개릿은 동의했지만, 일반 PC의 TPM은 그 기능을 지원하지 않는다고 답했다. 보틀리의 2019년 XPS 13처럼 PCR 5를 닫지 않는 펌웨어도 있다. 패치는 리뷰를 반영한 두 번째 버전이 필요하다.
user namespace와 파일 capability
root를 바깥 root에 그대로 매핑한(root-mapped) user namespace에서 파일에 capability를 붙이면 바깥에서도 유효하다. 5.12는 CAP_SETFCAP이 없는 프로세스가 root 매핑을 만들지 못하게 막았다. 조셉 바식(Josef Bacik)은 이 방어를 우회하는 경로를 찾았다.
| 우회 경로 | 바식 패치의 대응 |
|---|---|
B가 A의 user namespace에 setns()로 들어가 전체 capability를 얻는다 | setfcap_level이 대상보다 낮으면 EPERM |
A가 열어 둔 uid_map fd를 B가 넘겨받아 쓴다 | 열 때가 아니라 쓸 때 setfcap_level을 검사 |
| A가 B의 새 namespace에 root 매핑을 써 준다 | 파일 capability를 쓸 때 상위 root 매핑까지 닿는지 검사 |
B가 ptrace()로 A를 조종한다 | tracer의 setfcap_level이 낮으면 거부 |
핵심은 불리언 parent_could_setfcap을 정수 setfcap_level로 바꾼 것이다. 이 값은 CAP_SETFCAP이 상위 namespace 몇 단계까지 유효한지 기록한다. 시리즈는 8번째 버전까지 나왔다. setns()가 실패하는 경우가 생기므로 사용자 공간에서도 동작 차이가 보인다.
glibc 동적 링커 하드닝
Node.js의 Brotli 디코더에서 버퍼 오버플로가 나왔다. 공식 Node.js 리눅스 바이너리는 RHEL 8에서 PIE 없이 빌드된다. 그래서 실행 파일 영역에는 ASLR이 적용되지 않는다. 이를 계기로 아데메르발 자넬라 네토(Adhemerval Zanella Netto)가 10월 28일에 tunable 패치를 올렸다.
| tunable | 하드닝 값의 동작 |
|---|---|
glibc.rtld.require_pie=1 | PIE가 아닌 실행 파일을 거부 |
glibc.rtld.textrel=0 | 쓰기 불가 섹션을 대상으로 하는 재배치(TEXTREL)를 거부 |
glibc.rtld.wx_segments=0 | 쓰기와 실행이 동시에 가능한 세그먼트를 거부 |
glibc.rtld.bind_now=1 | 지연 바인딩(lazy binding)을 끈다. LD_BIND_NOW와 같다 |
glibc.rtld.relative_rpath=0 | 상대 경로 RPATH로 라이브러리를 찾지 않는다 |
glibc.rtld.relro={1,2} | RELRO 또는 -z now를 요구 |
glibc.rtld.hardened=1 | 위 6개를 한 번에 켠다 |
기본 동작은 바뀌지 않는다. 다음 버전에서는 allow_textrel처럼 더 긴 이름으로 바뀐다. 잭 와인버그(Zack Weinberg)는 vm.mmap_min_addr를 올려 낮은 주소에 링크된 실행 파일을 막는 방법도 제안했다. 댓글에서는 이 tunable이 하드닝이 아니라 “하드닝 안 된 코드를 금지하는 것”이라는 지적이 나왔다.
짧은 소식
- OpenSSH 10.6p2 — PAM 없이 musl libc를 쓰는 리눅스(Alpine 등)에 영향을 주는 심각한 취약점을 우회 수정했다. 데이미언 밀러(Damien Miller)는 해당 시스템에서 즉시
PasswordAuthentication=no를 설정하라고 했다. Alpine은 3.16까지 백포트한다. - 커널 릴리스 현황 — 7.4-rc2가 11월 9일에 나왔다. 7.4는 새해 무렵 나올 예정이다. 안정 버전 7.3.4, 6.18.63, 6.12.117, 6.6.162, 6.1.192, 5.15.225, 5.10.274가 나왔다.
- Amutable OS 개요 — 레나르트 푀터링(Lennart Poettering) 등이 이미지 기반 OS의 보안 속성을 공개했다. 셸, SSH, 언어 인터프리터를 기본으로 넣지 않는다. 서명된 Verity 이미지만 활성화한다.
- Asahi Linux — MIT 라이선스 코드가 출처 표시 없이 가져가지는 일이 생겼다. 그래서 모든 저장소를 GPLv2 이상으로 바꾼다.
- 개발 도구 — Firefox 160은
mailto:처리 요청 차단과 PiP 재생 속도 조절을 넣었다. Zellij 0.46은zellij terminal로 데스크톱 터미널로도 동작한다. OpenIndiana 2026.10과 XDC 2026 영상도 나왔다. - 팀 피터스(Tim Peters) 별세 — “The Zen of Python”(PEP 20)을 쓴 Python 초기 공동 설계자다. 귀도 반 로섬(Guido van Rossum)이 소식을 전했다.
이번 주 핵심 요약
- OIN 회원사의 특허라도 코덱은 OIN 보호 범위 밖일 수 있다. 하드웨어 프로토콜을 역공학할 때는 Linux System Definition 목록부터 확인할 것.
- root-mapped user namespace를 보안 경계로 믿지 말 것. 꼭 써야 한다면 권한을 버린 프로세스를 분리한다. 이 프로세스가
setns()나ptrace()로 다른 root 프로세스에 닿으면 안 된다. - 배포하는 실행 파일이 PIE인지
readelf -h로 확인할 것. glibc tunable이 기본값이 되면 PIE가 아닌 바이너리는 실행되지 않는다. - Alpine처럼 musl을 쓰고 PAM이 없는 시스템은 OpenSSH 10.6p2로 올리거나 비밀번호 인증을 끈다.
- lockdown 환경에서 하이버네이션이 필요하면 개릿의 패치를 지켜볼 것. 펌웨어가 PCR 5를 닫는지가 전제 조건이다.