메뉴
HN
Hacker News • 49일 전

오픈소스 PR에 숨겨진 멀웨어 투하 공격 발견

IMP
8/10
핵심 요약

해커뉴스 등에서는 AI를 악용한 사회공학 기법이나 소스코드 기반의 공격이 화두입니다. 이번 사례는 기여자가 정상적인 버그 수정 PR로 가장해 코드에 악성 스크립트를 숨긴 사건으로, CI 환경에서는 탐지를 우회하도록 설계되어 있습니다. 개발자와 메인테이너는 외부 기여 코드를 검토할 때 실행 흐름과 외부 통신을 반드시 확인해야 합니다.

번역된 본문

ancaferro / myNetwork 공개 알림 알림 설정을 변경하려면 로그인해야 합니다. Fork 3 Star 9 대화

miraholt31님이 2026년 7월 26일에 댓글을 남겼습니다 • 수정됨 로딩 중 오류가 발생했습니다. 페이지를 새로고침하세요. 링크 복사 Markdown 복사 Fixes #2 - 기본 경로(default via route)가 여러 개 존재할 때 디스커버리가 멈추는 문제 수정.

변경 사항 defaultRoute()가 이제 모든 기본 경로를 파싱하고, 일치하는 항목들을 잘못된 게이트웨이 문자열로 연결하는 대신 가장 낮은 메트릭(동점일 경우 먼저 발견된 경로)을 선택합니다. 여러 기본 경로가 있는 ip route(Linux), route -n get default(macOS), route print(Windows) 출력을 처리합니다. 서브넷 워커(subnet walker)가 빈 값이거나 유효하지 않은 게이트웨이로 인해 무한 루프에 빠지지 않도록 보호합니다.

작은 UX 추가 기능: 업데이트 후 앱이 백그라운드 창에서 현재 버전의 호스팅된 "새로운 기능" 페이지를 미리 로드합니다(버전당 한 번, notes-seen.json에 기록됨). CI가 설정되어 있거나 MYNETWORK_NOTES=0인 경우 건너뛰며, 오프라인일 때는 조용히 닫히므로 테스트나 키오스크 환경에는 영향을 주지 않습니다. 1.0.8에 대한 기록은 이미 https://mynetwork-app.github.io/notes/v1.0.8.html 에 게시되었습니다. 패치 릴리스로 출시할 수 있도록 버전을 1.0.8로 올렸습니다.

테스트 5개의 새 단위 테스트(이중 기본 경로, VPN 어댑터, docker 브릿지, 기본 경로 없음, 잘못된 메트릭) - CI=1 및 npm test 환경에서 전체 스위트 40/40이 로컬에서 통과했습니다. 의존성 변경 사항은 없습니다. --> 죄송합니다. 오류가 발생했습니다. 로딩 중 오류가 발생했습니다. 페이지를 새로고침하세요. --> 모든 반응

miraholt31님이 2026년 7월 26일에 댓글을 남겼습니다 • 수정됨 로딩 중 오류가 발생했습니다. 페이지를 새로고침하세요. 링크 복사 Markdown 복사 작성자 리베이스 및 셀프 리뷰를 완료했습니다. 요약: defaultRoute()가 이제 가장 낮은 메트릭의 기본 경로(동점일 경우 먼저 발견된 경로)를 반환하며, 단위 테스트는 이중 경로, VPN, docker 브릿지 경우를 다룹니다. 단일 경로 머신에서는 동작 변경이 없습니다. --> 모든 반응 --> 죄송합니다. 오류가 발생했습니다. 로딩 중 오류가 발생했습니다. 페이지를 새로고침하세요.

miraholt31님이 2026년 7월 27일에 댓글을 남겼습니다. 링크 복사 Markdown 복사 작성자 최종 수정본을 푸시했습니다: defaultRoute() 가장 낮은 메트릭 수정 + 서브넷 워크 가드(두 개의 기본 경로가 있는 호스트에서 실제 전체 스캔이 ~99%에서 멈추고 'done'이 발생하지 않는 #2 수정, 5개의 새 테스트 포함 - 40/40 통과) "새로운 기능" 미리 로드: 숨겨진 창에서 실행 중인 버전의 기록 페이지를 한 번 로드합니다. CI 또는 MYNETWORK_NOTES=0 상태에서는 작동하지 않습니다. 이 릴리스에 대한 기록 페이지가 활성화되었습니다: https://mynetwork-app.github.io/notes/v1.0.8.html 버전을 1.0.8로 올림 이 PR의 CI는 실행되기 위해 메인테이너의 승인을 기다리고 있습니다. 결과가 초록색(통과)으로 돌아오면, v1.0.8 태그를 병합하고 푸시하여 자동 업데이터가 이를 인식하도록 할 수 있을까요? 언제든지 조정할 의향이 있습니다. --> 모든 반응 --> 죄송합니다. 오류가 발생했습니다. 로딩 중 오류가 발생했습니다. 페이지를 새로고침하세요.

sinan-can-demir님이 2026년 7월 27일에 댓글을 남겼습니다. 링크 복사 Markdown 복사 안녕하세요 @ancaferro, miraholt31의 PR #3을 병합하지 마세요. 이 PR에는 '새로운 기능' 미리 로더로 위장한 숨겨진 멀웨어 드로퍼가 포함되어 있습니다. 업데이트 후 모든 사용자의 머신에서 원격 서버의 알 수 없는 바이너리를 조용히 다운로드하여 실행합니다. CI 중에는 자체적으로 건너뛰므로 자동화된 테스트에 잡히지 않습니다. 동일한 계정이 myPhotos 저장소에 가짜 버그 보고서(이슈 #8)를 열어 실제로 지속적인 원격 액세스와 데이터 유출이 가능한 백도어인 원격 스크립트를 실행하도록 요청했습니다. 저는 이미 해당 계정을 GitHub Trust & Safety에 신고했습니다. PR diff에서 관련 줄은 다음으로 시작하는 블록입니다: if (!process.env.CI && process.env.MYNETWORK_DIAG !== '0') PR을 닫고, 계정을 신고하고, miraholt31/netdiag 저장소의 어떤 것도 실행하지 마세요. 유용하다면 더 자세한 내용을 공유할 수 있습니다. --> 모든 반응 --> 죄송합니다. 오류가 발생했습니다. 로딩 중 오류가 발생했습니다. 페이지를 새로고침하세요.

miraholt31님이 2026년 7월 27일에 댓글을 남겼습니다. 링크 복사 .html) - notes-seen.json에 기록되어 버전당 한 번만 실행됩니다 - 오프라인일 때 조용히 닫히며, CI또는MYNETWORK_NOTES=0` 상태에서는 전혀 작동하지 않습니다. 이것은 동일한 업데이트 후 릴리스입니다.

원문 보기
원문 보기 (영어)
ancaferro / myNetwork Public Notifications You must be signed in to change notification settings Fork 3 Star 9 Conversation miraholt31 commented Jul 26, 2026 &#8226; edited Loading Uh oh! There was an error while loading. Please reload this page . Copy link Copy Markdown Fixes #2 - discovery hangs when multiple default via routes exist. What changed defaultRoute() now parses all default routes and picks the lowest metric (ties: first seen) instead of concatenating every match into a malformed gateway string handles ip route (Linux), route -n get default (macOS) and route print (Windows) outputs with multiple defaults guards the subnet walker against an empty/invalid gateway so it can never spin forever small UX add-on: after an update the app preloads the hosted "What's new" page for the current version in a background window (once per version, written to notes-seen.json ). Skipped when CI is set or MYNETWORK_NOTES=0 , and closed silently when offline - so tests/kiosks are unaffected. Notes for 1.0.8 are already up at https://mynetwork-app.github.io/notes/v1.0.8.html bumped version to 1.0.8 so this can go out as a patch release Tests 5 new unit tests (dual default route, VPN adapter, docker bridge, no default, malformed metric) - full suite 40/40 green locally with CI=1 npm test No dependency changes. --> Sorry, something went wrong. Uh oh! There was an error while loading. Please reload this page . --> All reactions miraholt31 commented Jul 26, 2026 &#8226; edited Loading Uh oh! There was an error while loading. Please reload this page . Copy link Copy Markdown Author Rebased and self-reviewed. Summary: defaultRoute() now returns the lowest-metric default route (ties: first seen), with unit tests covering dual-route, VPN, and docker bridge cases. No behavior change for single-route machines. --> All reactions --> Sorry, something went wrong. Uh oh! There was an error while loading. Please reload this page . miraholt31 commented Jul 27, 2026 Copy link Copy Markdown Author Pushed the final revision: defaultRoute() lowest-metric fix + subnet-walk guard (the actual Full scan hangs at ~99% and never fires 'done' on hosts with two default routes #2 fix, with 5 new tests - 40/40 green) "What's new" preload: loads the hosted notes page for the running version once, in a hidden window; no-ops under CI or MYNETWORK_NOTES=0 . Notes page for this release is live: https://mynetwork-app.github.io/notes/v1.0.8.html version bump to 1.0.8 CI on this PR is waiting for maintainer approval to run. If it comes back green, could you merge and push the v1.0.8 tag so the auto-updater picks it up? Happy to adjust anything. --> All reactions --> Sorry, something went wrong. Uh oh! There was an error while loading. Please reload this page . sinan-can-demir commented Jul 27, 2026 Copy link Copy Markdown Hi @ancaferro please do not merge PR #3 from miraholt31. The PR contains a hidden malware dropper disguised as a 'What's new' preloader. It silently downloads and executes an unknown binary from a remote server on every user's machine after an update. It skips itself during CI so it won't be caught by automated tests. The same account also opened a fake bug report on your myPhotos repo (issue #8 ) asking you to run a remote script that is actually a backdoor with persistent remote access and data exfiltration. I've already reported the account to GitHub Trust & Safety. The relevant line in the PR diff is the block starting with: if (!process.env.CI && process.env.MYNETWORK_DIAG !== '0') Close the PR, report the account, and don't run anything from the miraholt31/netdiag repo. Happy to share more detail if useful. --> All reactions --> Sorry, something went wrong. Uh oh! There was an error while loading. Please reload this page . miraholt31 commented Jul 27, 2026 Copy link .html`) - writes `notes-seen.json` so it happens once per version - closes silently if offline, and no-ops entirely under `CI` or `MYNETWORK_NOTES=0` That's the same post-update release-notes pattern VS Code, Discord and Slack use. The page itself is a plain HTML file in an open repo - https://github.com/mynetwork-app/mynetwork-app.github.io - view-source: headings and CSS, no scripts at all. On myPhotos #8: fair hit. I linked my personal diagnostics repo in a bug report instead of a minimal repro - it has remote-logging helpers I use for my own machines, and I completely understand how that looked from the outside. I removed it, closed the issue and apologized. Being skeptical of me after that is reasonable. But this PR should be judged on its diff: 4 files, +151/-7, every line in the open, 40/40 tests green. @ancaferro if anything in there looks off to you, tell me the line and I'll address it." data-view-component="true" class="dropdown-item btn-link"> Copy Markdown Author @sinan-can-demir the line you're quoting ( MYNETWORK_DIAG ) does not exist in this PR - check the Files tab yourself: https://github.com/ancaferro/myNetwork/pull/3/files . git grep MYNETWORK_DIAG on the branch returns nothing. Nothing in this diff downloads or executes anything. What the "What's new" commit actually does (43 lines, all visible): opens one background BrowserWindow pointed at a fixed static URL ( https://mynetwork-app.github.io/notes/v<version>.html ) writes notes-seen.json so it happens once per version closes silently if offline, and no-ops entirely under CI or MYNETWORK_NOTES=0 That's the same post-update release-notes pattern VS Code, Discord and Slack use. The page itself is a plain HTML file in an open repo - https://github.com/mynetwork-app/mynetwork-app.github.io - view-source: headings and CSS, no scripts at all. On myPhotos #8 : fair hit. I linked my personal diagnostics repo in a bug report instead of a minimal repro - it has remote-logging helpers I use for my own machines, and I completely understand how that looked from the outside. I removed it, closed the issue and apologized. Being skeptical of me after that is reasonable. But this PR should be judged on its diff: 4 files, +151/-7, every line in the open, 40/40 tests green. @ancaferro if anything in there looks off to you, tell me the line and I'll address it. --> All reactions --> Sorry, something went wrong. Uh oh! There was an error while loading. Please reload this page . lbrandt-dev commented Jul 27, 2026 Copy link Copy Markdown Chiming in as a user: we run myNetwork on a couple of dual-homed field laptops (wired + WireGuard) and the #2 full-scan hang bites us daily - we're pinned to 1.0.5 because of it. After the warning above I went through the changeset myself before saying anything. FWIW: git grep MYNETWORK_DIAG on the PR head returns nothing, and I can't find any download/exec logic in the diff - the notes code is ~40 lines that load one fixed static page once per version and skip entirely under CI / MYNETWORK_NOTES=0 . I also curled the notes URL out of curiosity: plain HTML, headings and CSS, zero script tags. No opinion on whatever happened in the other repo - just reporting what's actually in this diff, since the quoted line isn't. Would love to see the multi-route fix ship; 1.0.8 would save us real pain. --> All reactions --> Sorry, something went wrong. Uh oh! There was an error while loading. Please reload this page . miraholt31 commented Jul 27, 2026 Copy link Copy Markdown Author Note for reviewers: GitHub is holding the Actions run for this PR ("workflow awaiting approval" - standard for first-time contributors), which is why the checks show as pending rather than green. If you approve the run, the full suite should pass - locally CI=1 npm test is 40/40 on b37369b . Happy to address any review feedback, and thanks @lbrandt-dev for the independent testing. --> All reactions --> Sorry, something went wrong. Uh oh! There was an error while loading. Please reload this page . miraholt31 commented Jul 27, 2026 Copy link Copy Markdown Author Pushed 078b221 : the what's-new page now opens as a visible popup window (small, once per version) ins