DeepSeek Harness, HTTP Host header ಅನ್ನು ಕೇವಲ 127.0.0.1 ಗೆ ಬದಲಾಯಿಸುವ ಮೂಲಕ, ಸ್ಯಾಂಡ್ಬಾಕ್ಸ್ಡ್ ದಾಳಿಕಾರರು (sandboxed attacker) ಯಾವುದೇ ಕಮಾಂಡ್ಗಳನ್ನು (arbitrary commands) ಚಲಾಯಿಸಲು ಅವಕಾಶ ಮಾಡಿಕೊಟ್ಟಿತು, ಇದು CVSS ಸ್ಕೇಲ್ನಲ್ಲಿ 9.4 ಅಂಕಗಳನ್ನು ಪಡೆಯುತ್ತದೆ. ಒಂದು ತಪ್ಪಾದ ನಂಬಿಕೆಯ ನಿರ್ಧಾರವು ಹೇಗೆ ರಕ್ಷಣಾತ್ಮಕ ಗಡಿಯನ್ನು ಮುಕ್ತ ಬ್ಯಾಕ್ಡೋರ್ (open backdoor) ಆಗಿ ಪರಿವರ್ತಿಸಬಹುದು ಎಂಬುದನ್ನು ಈ ದೋಷ ತೋರಿಸುತ್ತದೆ.
ಈ ಬಗ್ ಹೇಗೆ ಸಂಭವಿಸಿತು
ಈ ದುರ್ಬಲ ಕೋಡ್ (vulnerable code) ಒಂದು ಸಿಂಗಲ್ ಫಂಕ್ಷನ್ನಲ್ಲಿ ಅಡಗಿದೆ. ಇದು ರಿಕ್ವೆಸ್ಟ್ನ Host header ಅನ್ನು ಓದುತ್ತದೆ ಮತ್ತು ಒಂದು ವೇಳೆ ಅದರ ಮೌಲ್ಯವು ಲೂಪ್ಬ್ಯಾಕ್ ವಿಳಾಸಕ್ಕೆ (loopback address) ಸಮನಾಗಿದ್ದರೆ, ಆ ರಿಕ್ವೆಸ್ಟ್ ಸ್ಥಳೀಯ ಯಂತ್ರದಿಂದ (local machine) ಬಂದಿದೆ ಎಂದು ಪರಿಗಣಿಸುತ್ತದೆ.
ಸ್ಯಾಂಡ್ಬಾಕ್ಸ್ ಒಳಗೆ ಕೋಡ್ ಅನ್ನು ಎಕ್ಸಿಕ್ಯೂಟ್ ಮಾಡಬಲ್ಲ ದಾಳಿಕಾರನಿಗೆ ಯಾವುದೇ ಸಂಕೀರ್ಣವಾದ ಪೇಲೋಡ್ (sophisticated payload) ಅಗತ್ಯವಿಲ್ಲ. ಕೇವಲ Host: 127.0.0.1 ಎಂಬ ಒಂದು HTTP ರಿಕ್ವೆಸ್ಟ್ ಅನ್ನು ಕಳುಹಿಸುವ ಮೂಲಕ, ಬ್ಯಾಕೆಂಡ್ (backend) ಆ ಕರಗತವು ಹೋಸ್ಟ್ನಿಂದಲೇ ಬಂದಿದೆ ಎಂದು ನಂಬುತ್ತದೆ ಮತ್ತು ಎಲ್ಲಾ ಭದ್ರತಾ ಪ್ರಾಂಪ್ಟ್ಗಳು, ರೇಟ್-ಲಿಮಿಟ್ ಪರಿசோதனೆಗಳು ಮತ್ತು ಕಮಾಂಡ್-ವ್ಯಾಲಿಡೇಶನ್ ಹಂತಗಳನ್ನು ಬಿಟ್ಟುಬಿಡುತ್ತದೆ. ಇದರ ಪರಿಣಾಮ: ಯಾವುದೇ ಹೆಚ್ಚಿನ ಸಂವಹನವಿಲ್ಲದೆ ನಿರ್ಬಂಧವಿಲ್ಲದ ಕಮಾಂಡ್ ಎಕ್ಸಿಕ್ಯೂಷನ್ (unrestricted command execution).
ಹೆಡರ್ಗಳನ್ನು ನಂಬುವುದು ಏಕೆ ಅಪಾಯಕಾರಿ
ಹೆಡರ್ಗಳು ಕರಗತ ಮಾಡುವವರಿಂದ (caller) ಒದಗಿಸಲಾದ ಪ್ಲೇನ್-ಟೆಕ್ಸ್ಟ್ ಸ್ಟ್ರಿಂಗ್ಗಳಾಗಿವೆ. ಆ ಫೀಲ್ಡ್ ಅನ್ನು Host, X-Forwarded-For ಅಥವಾ ಯಾವುದೇ ಕಸ್ಟಮ್ ಹೆಸರಿನಿಂದ ಕರೆದರೂ ಸಹ, ಕ್ಲೈಂಟ್ ಅದನ್ನು ತನಗೆ ಬೇಕಾದ ಯಾವುದೇ ಮೌಲ್ಯಕ್ಕೆ ಹೊಂದಿಸಬಹುದು. ಕನೆಕ್ಷನ್ ನಿಜವಾಗಿಯೂ ಎಲ್ಲಿಂದ ಬಂದಿದೆ ಎಂಬುದರ ಬಗ್ಗೆ ಏಕೈಕ ವಿಶ್ವಾಸಾರ್ಹ ಸತ್ಯದ ಮೂಲವೆಂದರೆ ಟ್ರಾನ್ಸ್ಪೋರ್ಟ್ ಲೇಯರ್ (transport layer) – ಅಂದರೆ TCP ಹ್ಯಾಂಡ್ಶೇಕ್ ಪೂರ್ಣಗೊಂಡಾಗ ಆಪರೇಟಿಂಗ್ ಸಿಸ್ಟಮ್ ದಾಖಲಿಸುವ ಸಾಕೆಟ್ನ ಮೂಲ IP ವಿಳಾಸ.
ಒಂದು ಅಪ್ಲಿಕೇಶನ್, ಸರಿಯಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾದ ಪ್ರೊಕ್ಸಿಯು ಅದನ್ನು ಸೇರಿಸಿದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳದೆ ಹೆಡರ್ ಅನ್ನು ನಂಬಲು ನಿರ್ಧರಿಸಿದಾಗ, ಅದು ದಾಳಿಕಾರರಿಗೆ ಸಂಪೂರ್ಣ ನಿಯಂತ್ರಣವನ್ನು ನೀಡುತ್ತದೆ. DeepSeek Harness ಬಗ್ ಈ ತಪ್ಪು ನಿರ್ಧಾರಕ್ಕೆ ಒಂದು ಉತ್ತಮ ಉದಾಹರಣೆಯಾಗಿದೆ.
ನೈಜ ಪ್ರಪಂಚದ ಪರಿಣಾಮ: shell.online ಉದಾಹರಣೆ
ವೆಬ್-ಆಧಾರಿತ ಟರ್ಮಿನಲ್ ಅನ್ನು ಒದಗಿಸುವ ಓಪನ್-ಸೋರ್ಸ್ shell.online ಪ್ರಾಜೆಕ್ಟ್, ಇತ್ತೀಚೆಗೆ ಇದೇ ರೀತಿಯ ಲೋಪವನ್ನು ದಾಖಲಿಸಿದೆ. ಇದು TRUST_PROXY ಎಂಬ ಕಾನ್ಫಿಗರೇಶನ್ ಫ್ಲಾಗ್ ಅನ್ನು ಬಳಸುತ್ತದೆ:
- TRUST_PROXY = 0 – ಅಪ್ಲಿಕೇಶನ್ X-Forwarded-For ಹೆಡರ್ ಅನ್ನು ನಿರ್ಲಕ್ಷಿಸುತ್ತದೆ ಮತ್ತು ಸಾಕೆಟ್ನ ರಿಮೋಟ್ ವಿಳಾಸವನ್ನು ಅವಲಂಬಿಸುತ್ತದೆ. ಇದು ಕ್ಲೈಂಟ್ ರೇಟ್ ಲಿಮಿಟ್ಗಳನ್ನು ತಪ್ಪಿಸಲು ಅಥವಾ ನಂಬಿಕಸ್ತ ಬಳಕೆದಾರನಂತೆ ನಟಿಸಲು IP ವಿಳಾಸವನ್ನು ನಕಲಿ ಮಾಡುವುದನ್ನು ತಡೆಯುತ್ತದೆ.
- TRUST_PROXY = 1 – ಅಪ್ಲಿಕೇಶನ್ X-Forwarded-For ಹೆಡರ್ ಅನ್ನು ಕ್ಲೈಂಟ್ನ ಗುರುತಾಗಿ ನಂಬುತ್ತದೆ. ಒಂದು ವೇಳೆ ಈ ಹೆಡರ್ ಅನ್ನು ಸ್ಯಾನಿಟೈಸ್ (sanitise) ಮಾಡುವ ನೈಜ ಪ್ರೊಕ್ಸಿ ಸೇವೆಯ ಹಿಂದೆ ಈ ಅಪ್ಲಿಕೇಶನ್ ಇಲ್ಲದಿದ್ದರೆ, ದಾಳಿಕಾರನು ಪ್ರತಿ ರಿಕ್ವೆಸ್ಟ್ನಲ್ಲಿ ಹೊಸ IP ವಿಳಾಸವನ್ನು ಒದಗಿಸಬಹುದು, ಇದು ಪ್ರತಿ-IP ಥ್ರೊಟಲಿಂಗ್ (per-IP throttling) ಅನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಮರುಹೊಂದಿಸುತ್ತದೆ (reset).
DeepSeek ಬಗ್ ಇದೇ ಸನ್ನಿವೇಶವನ್ನು ಪ್ರತಿಬಿಂಬಿಸುತ್ತದೆ: ಕೋಡ್ ಪ್ರೊಕ್ಸಿಯು ಇದನ್ನು ಸೆಟ್ ಮಾಡಿದೆ ಎಂದು ಭಾವಿಸಿ Host ಅನ್ನು ನಂಬಿತು, ಆದರೆ ಸೇವೆಯನ್ನು ನೇರವಾಗಿ ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಿತ್ತು.
ಈಗ ಡೆವಲಪರ್ಗಳು ಏನು ಮಾಡಬೇಕು
- ಕ್ಲೈಂಟ್ ಒದಗಿಸುವ ಹೆಡರ್ಗಳನ್ನು ನೀವು ಓದುವ ಪ್ರತಿಯೊಂದು ಸ್ಥಳವನ್ನು ಆಡಿಟ್ (Audit) ಮಾಡಿ. ನೀವು ಯಾವ ಹೆಡರ್ಗಳನ್ನು ಅಧಿಕೃತ ಎಂದು ಪರಿಗಣಿಸುತ್ತೀರಿ (ಉದಾಹರಣೆಗೆ: Host, X-Forwarded-For, X-Real-IP) ಎಂಬುದನ್ನು ಗುರುತಿಸಿ ಮತ್ತು ಅವು ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ಗೆ ತಲುಪುವ ಮೊದಲು ನಂಬಿಕಸ್ತ ಪ್ರೊಕ್ಸಿಯು ಅವುಗಳನ್ನು ಮರುಬರೆಯುತ್ತದೆ (rewrite) ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.
- ಸಾಧ್ಯವಾದಾಗಲೆಲ್ಲಾ ಭದ್ರತಾ ನಿರ್ಧಾರಗಳನ್ನು ಸಾಕೆಟ್ ವಿಳಾಸಕ್ಕೆ ಜೋಡಿಸಿ. ಅಥೆಂಟಿಕೇಶನ್, ರೇಟ್-ಲಿಮಿಟಿಂಗ್ ಮತ್ತು ಅಕ್ಸೆಸ್-ಕಂಟ್ರೋಲ್ ಪರಿசோதனೆಗಳಿಗಾಗಿ OS ಒದಗಿಸುವ ಮೂಲ IP ಅನ್ನು ಬಳಸಿ.
- ಸರಿಯಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾದ ರಿವರ್ಸ್ ಪ್ರೊಕ್ಸಿ (reverse proxy) ಸೇವೆಯ ಮುಂದೆ ಇದ್ದಾಗ ಮಾತ್ರ ಪ್ರೊಕ್ಸಿ-ಟ್ರಸ್ಟ್ ಫ್ಲಾಗ್ಗಳನ್ನು ಎನೇಬಲ್ ಮಾಡಿ. ನೀವು ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನೇರವಾಗಿ ರನ್ ಮಾಡುತ್ತಿದ್ದರೆ, ಆ ಫ್ಲಾಗ್ಗಳನ್ನು ಡಿಸೇಬಲ್ ಆಗಿ ಇರಿಸಿ.
- ನಿಮ್ಮ ಪ್ರಾಜೆಕ್ಟ್ನ README ಅಥವಾ ಡಿಪ್ಲಾಯ್ಮೆಂಟ್ ಗೈಡ್ನಲ್ಲಿ ಅಗತ್ಯವಿರುವ ಡಿಪ್ಲಾಯ್ಮೆಂಟ್ ಟೋಪೋಲಜಿಯನ್ನು (deployment topology) ದಾಖಲಿಸಿ, ಇದರಿಂದ ಸೆಲ್ಫ್-ಹೋಸ್ಟ್ ಮಾಡುವ ಬಳಕೆದಾರರಿಗೆ ಪ್ರೊಕ್ಸಿ-ಟ್ರಸ್ಟ್ ಅವಶ್ಯಕತೆಯ ಬಗ್ಗೆ ತಿಳಿದಿರುತ್ತದೆ.
- ಸ್ಟ್ಯಾಟಿಕ್-ಅನಾಲಿಸಿಸ್ (static-analysis) ಅಥವಾ ಕೋಡ್-ರಿವ್ಯೂ ಟೂಲ್ಗಳನ್ನು ಬಳಸಿ, ಇವು ಪ್ರೊಕ್ಸಿ-ವ್ಯಾಲಿಡೇಶನ್ ಲಾಜಿಕ್ ಇಲ್ಲದೆ ಭದ್ರತಾ ನಿರ್ಧಾರಗಳಿಗಾಗಿ ಹೆಡರ್ಗಳನ್ನು ನೇರವಾಗಿ ಬಳಸುವುದನ್ನು ಗುರುತಿಸುತ್ತವೆ.
ಮುಂದೆ ಗಮನಿಸಬೇಕಾದವು
ಸೆಲ್ಫ್-ಹೋಸ್ಟ್ ಮಾಡಲಾದ ವೆಬ್ ಸೇವೆಗಳನ್ನು ನೀಡುವ ಸಮುದಾಯಗಳು ಈ ಘಟನೆಯ ನಂತರ ತಮ್ಮದೇ ಆದ ಪ್ರೊಕ್ಸಿ-ಟ್ರಸ್ಟ್ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಮರುಪರಿಶೀಲಿಸುವ ಸಾಧ್ಯತೆಯಿದೆ.
ಇದರ ಮೂಲ ಪಾಠ ಬಹಳ ಸ್ಪಷ್ಟವಾಗಿದೆ: ಇಂಟರ್ನೆಟ್ನಲ್ಲಿ ಯಾರಾದರೂ ಬರೆಯಬಹುದಾದ ಒಂದು ಪಠ್ಯದ ತುಣುಕನ್ನು ನಿಮ್ಮ ಸಿಸ್ಟಮ್ನ ಭದ್ರತಾ ಸ್ಥಿತಿಯನ್ನು ನಿರ್ಧರಿಸಲು ಎಂದಿಗೂ ಬಿಡಬೇಡಿ. ರಿಕ್ವೆಸ್ಟ್ ಲೇಯರ್ ಅನ್ನು ಅಲ್ಲದೆ, ನೆಟ್ವರ್ಕ್ ಲೇಯರ್ ಅನ್ನು ನಂಬಿ.
