🇰🇷 한글 설명
Grist 스프레드시트 소프트웨어에서 사용되는 Python 공식을 실행하는 메서드 중 하나인 pyodide에서 샌드박스 장벽이 없을 경우, 악의적인 문서를 여는 사용자에게서 임의의 프로세스를 서버에서 실행할 수 있는 취약점이 발견되었습니다.
💡 쉬운 설명
Grist 스프레드시트 소프트웨어에서 악의적인 문서를 여는 경우, 서버에서 임의의 프로세스를 실행할 수 있는 취약점이 있습니다. 이는 pyodide에서 샌드박스 장벽이 없기 때문에 발생합니다. Grist 버전 1.7.9 이상에서 pyodide를 deno에서 실행하여 문제를 해결했습니다.
🇺🇸 원문 (English)
Grist is spreadsheet software using Python as its formula language. Grist offers several methods for running those formulas in a sandbox, for cases where the user may be working with untrusted spreadsheets. One such method runs them in pyodide, but pyodide on node does not have a useful sandbox barrier. If a user of Grist sets `GRIST_SANDBOX_FLAVOR` to `pyodide` and opens a malicious document, that document could run arbitrary processes on the server hosting Grist. The problem has been addressed in Grist version 1.7.9 and up, by running pyodide under deno. As a workaround, a user can use the gvisor-based sandbox by setting `GRIST_SANDBOX_FLAVOR` to `gvisor`.
📍 영향받는 시스템
Grist 버전 1.7.9 이전
🛡️ 대응 방법
Grist 버전 1.7.9 이상으로 업데이트하거나, gvisor-based 샌드박스를 사용하도록 설정합니다. 설정 방법은 GRIST_SANDBOX_FLAVOR를 gvisor로 설정하는 것입니다.
🔧 검증 코드
로컬 Linux PC에서 Grist 버전을 확인하여 취약점 여부를 점검합니다. Python 3.x 이상이 설치되어 있어야 하며, Grist가 설치되어 있어야 합니다. 코드를 실행하면 Grist 버전을 확인하여 취약점 여부를 판단합니다.
import subprocess
result = subprocess.run(['grist', '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
version = result.stdout.decode('utf-8').strip()
if version < '1.7.9':
print({"result": "취약", "reason": "Grist 버전이 1.7.9 미만"})
else:
print({"result": "양호", "reason": "Grist 버전이 1.7.9 이상"})