Skip to content

OpenThumb 1.0.2 — crash·DoS·답장 안전성

Choose a tag to compare

@neulketing neulketing released this 29 Jul 15:40

포크 자체 코드 전수 감사에서 나온 결함 수리. 크래시 경로 2건과 상대방 대화창에 원시 JSON이 발송될 수 있던 경로 1건 포함.

Fixed

  • 트리거 실행 실패가 앱을 죽이지 않습니다. 실행 코루틴에 catch가 없고 스코프에 핸들러도 없어, Android 12+에서 포그라운드 서비스 시작이 거부되는 것만으로 프로세스가 죽고 알림 리스너까지 함께 사라졌습니다.
  • 답장이 원시 페이로드를 보내지 않습니다. assistant 메시지 파싱이 실패하면 폴백이 저장된 JSON 문자열을 그대로 반환했고, 그게 상대 대화창으로 발송됐습니다. 이제 파싱 실패 시 아무것도 보내지 않습니다.
  • 답장 실패가 실패로 기록됩니다. 세션만 있으면 ok로 남아, 사용자는 "실행됨"을 보는데 상대는 아무것도 못 받는 상태였습니다.
  • 답장 불가 알림은 건너뜁니다. canReply가 구현돼 있는데 호출되지 않아, 은행·택배 푸시가 최대 10분짜리 에이전트 실행과 쿨다운을 소모하고도 보낼 곳이 없었습니다.
  • 디버그 서버가 악의적 요청에 죽지 않습니다. Content-Length를 무제한 신뢰해 2GB 헤더 한 줄이 OOM을 유발했고, 이는 Error라 catch에 안 잡혀 accept 루프까지 끌고 죽었습니다(앱 재시작 전까지 서버 불능). 32MB 상한 + 커넥션별 supervisor.
  • 업스트림 태그명이 CI에서 코드를 실행할 수 없습니다. contents: write 권한 잡의 run:에 업스트림 릴리스 태그가 직접 삽입되고 있었습니다.
  • ensure_forward 포트 계산 수리. bash가 local 실행 전에 모든 워드를 확장하므로 호출자의 index를 읽고 있었습니다 — 변수명 우연에만 의존하던 상태로, 이름 하나만 바뀌면 전 단말 RPC가 0번 기기로 가면서 출력엔 각 단말 serial이 붙었을 것입니다.

Changed

  • CI가 포크 자체 유닛 테스트를 실행합니다(34건 전부 통과). 이전엔 한 번도 실행되지 않았습니다. 상속된 실패 3종은 이름으로 제외 — docs/upstream-test-baseline.md.
  • ShellCheck를 --severity=warning으로. error에서는 fleet 스크립트의 유일한 실결함(SC2318)이 걸러지고 있었습니다.