curl이 우연히 9개월 동안 튜링 완전했던 과정

2 days ago 7

curl 8.12~8.16에서는 변수 값 슬라이싱과 깊이 제한 없는 설정 파일 포함을 조합해 임의의 2카운터 Minsky 프로그램을 모사할 수 있었음 카운터는 x의 개수로, 명령 상태는 설정 파일로 나타내며, expand-config 로 다음 파일을 선택해 증가, 감소, 조건 분기와 점프를 구현함 튜링 완전성은 문자열과 자원이 무한하다는 이상화 아래 성립하며, 실제 바이너리에는 확장 크기, 스택, 열린 파일과 메모리에 따른 실행 한계가 있음 curl 8.17.0은 설정 파일 포함 깊이를 5단계로 제한해 이 구성을 통한 튜링 완전성 구현을 막음 설정 파일 4개로 2 + 3을 계산하는 PoC가 제공되며, 이 동작에 따른 보안 영향은 없음 설정 파일로 구현한 2카운터 Minsky 머신 curl 8.12~8.16의 변수 슬라이싱과 명시적 깊이 제한 없는 설정 파일 포함을 결합하면 임의의 2카운터 Minsky 프로그램을 설정 파일로 변환할 수 있음 카운터 값 n은 x를 n개 반복한 문자열로 나타냄 각 명령 상태는 하나 이상의 설정 파일을 사용하며, 파일 이름이 레이블 역할을 함 expand-config가 다음에 실행할 설정 파일을 선택함 변수 확장과 슬라이싱은 다음 규칙으로 동작함 {{b}}는 변수 b의 현재 값을 확장함 [0-0]은 첫 바이트만 남기므로 결과는 x 또는 빈 문자열임 [1-]은 첫 바이트를 제외한 나머지를 남김 변수 문서에 따라 빈 슬라이스는 빈 문자열이 됨 Minsky 명령을 curl 설정에 다음과 같이 대응시킴 레지스터 R: 변수 r에 들어 있는 x 바이트 수로 값을 나타냄 증가 INC(R): expand-variable = "r={{r}}x"로 x 하나를 덧붙임 감소 DEC(R): expand-variable = "r[1-]={{r}}"로 첫 바이트를 제거함 영 검사 JZ(R, _, _x): expand-variable = "t[0-0]={{r}}" 뒤에 expand-config = "state_{{t}}.conf"를 실행해 빈 값과 x에 따라 분기함 점프 JMP(S): expand-config = "S.conf"로 해당 상태를 실행함 정지: 더 이상 expand-config를 실행하지 않음 계산 PoC와 추가 구현 curl_addition.zip의 설정 파일 4개로 2 + 3을 계산함 필요하면 curl 8.12.0을 로컬에 빌드한 뒤 addition/ 디렉터리에서 /tmp/curl-tc-build...

Read Entire Article




피플앤툴즈 네트워크
🛍 샵