
Research
/Security News
10 npm Typosquatted Packages Deploy Multi-Stage Credential Harvester
Socket researchers found 10 typosquatted npm packages that auto-run on install, show fake CAPTCHAs, fingerprint by IP, and deploy a credential stealer.
@n3/crypto
Advanced tools
npm install @n3/crypto
import { getValidCertificates } from '@n3/crypto';
getValidCertificates()
.then((certificates) => {
...
}, (err) => {
...
});
certificates - ΠΌΠ°ΡΡΠΈΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΡ Ρ ΠΏΠΎΠ»ΡΠΌΠΈ:
certificate - ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ΠΈΡ; Π΄ΠΎΠ»Π΅ΠΆΠ½ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ signHash ΠΈ signStringname - ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° Π²ΠΈΠ΄Π° STREET="ΡΠ». ΠΡΠΎΠ²Π΅ΡΠΎΡΠ½Π°Ρ, Π΄. 1, Π»ΠΈΡ. Π", SNILS=12345678901, OGRN=1234567890123, INN=001234567890, E=testov@test.test, C=RU, S=78 Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³, L=Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³, O=Π’Π΅ΡΡΠΎΠ²Π°Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ, OU=ΠΡΠ΄Π΅Π» ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, G=Π’Π΅ΡΡ Π’Π΅ΡΡΠΎΠ²ΠΈΡ, SN=Π’Π΅ΡΡΠΎΠ², T=ΠΠ½ΠΆΠ΅Π½Π΅Ρ-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ, CN=Π’Π΅ΡΡΠΎΠ²Π°Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡprint - Thumbprint ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° Π²ΠΈΠ΄Π° CC1A530EC972A18FF5A9CD5D5EF319FD86B9E6CFparams - ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ name Π² Π²ΠΈΠ΄Π΅ {key: value}objid - ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ id ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°validFromDate - Π΄Π°ΡΠ°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ Π²Π°Π»ΠΈΠ΄Π΅Π½, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 2017-04-06T05:53:47.000Z2017-04-06T05:53:47.000Z - Π΄Π°ΡΠ°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ Π²Π°Π»ΠΈΠ΄Π΅Π½, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 2018-04-06T05:53:47.000Zimport { signHash } from '@n3/crypto';
signHash(hash, certificate)
.then((signedHash) => {
...
}, (errorMessage) => {
...
});
hash - hex-ΡΡΡΠΎΠΊΠ°certificate - ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΠ·ΠΎΠ²Π° getValidCertificatesimport { coSignHash } from '@n3/crypto';
coSignHash(hash, certificate, signedMessage)
.then((signedHash) => {
...
}, (errorMessage) => {
...
});
hash - hex-ΡΡΡΠΎΠΊΠ°certificate - ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΠ·ΠΎΠ²Π° getValidCertificatessignedMessage - ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅import { signString } from '@n3/crypto';
signHash(stringToSign, certificate)
.then((signedString) => {
...
}, (errorMessage) => {
...
});
stringToSign - base64-ΡΡΡΠΎΠΊΠ°certificate - ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΠ·ΠΎΠ²Π° getValidCertificatesimport { verifySignString } from '@n3/crypto';
verifySignString(singedMessage, dataToSign, isDetached)
.then((signedString) => {
...
}, (errorMessage) => {
...
});
singedMessage - ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅dataToSign - ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° CAdESCOM.CadesSignedData, ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈisDetached - Π²ΠΈΠ΄ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ: ΠΎΡΠ΄Π΅Π»Π΅Π½Π½Π°Ρ (true) ΠΈΠ»ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΠ΅Π½Π½Π°Ρ (false)import { getVersion } from '@n3/crypto';
getVersion()
.then(({
plugin,
provider,
}) => {
...
}, (errorMessage) => {
...
});
plugin - Π²Π΅ΡΡΠΈΡ ΠΏΠ»Π°Π³ΠΈΠ½Π°
BuildVersion - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠΌΠ΅Ρ ΡΠ±ΠΎΡΠΊΠΈMajorVersion - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ°ΡΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π²Π΅ΡΡΠΈΠΈ.MinorVersion - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ»Π°Π΄ΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π²Π΅ΡΡΠΈΠΈ.Version - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ.provider - Π²Π΅ΡΡΠΈΡ ΠΊΡΠΈΠΏΡΠΎΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°
BuildVersion - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠΌΠ΅Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΊΡΠΈΠΏΡΠΎΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°MajorVersion - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ°ΡΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π²Π΅ΡΡΠΈΠΈ ΠΊΡΠΈΠΏΡΠΎΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°MinorVersion - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ»Π°Π΄ΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π²Π΅ΡΡΠΈΠΈ ΠΊΡΠΈΠΏΡΠΎΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°Version - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΊΡΠΈΠΏΡΠΎΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°Name - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΡΠΈΠΏΡΠΎΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°import { getAlgorithm } from '@n3/crypto';
getAlgorithm(certificate)
.then(({
algorithmOid,
signMethod,
digestMethod,
hashMethod
}) => {
...
}, (errorMessage) => {
...
});
certificate - ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΠ·ΠΎΠ²Π° getValidCertificatesalgorithmOid - OID Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Ρ
ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡsignMethod - URI Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΏΠΎΠ΄ΠΏΠΈΡΠΈdigestMethod - URI ΠΌΠ΅ΡΠΎΠ΄Π° Π΄Π°ΠΉΠ΄ΠΆΠ΅ΡΡΠ°hashMethod - Π°Π»Π³ΠΎΡΠΈΡΠΌ Ρ
ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡimport { mock } from '@n3/crypto';
import mockJSON from 'cryptopro-mock.json';
mock(mockJSON);
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²ΡΠ΅ Π²ΡΡΠ΅ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π±ΡΠ΄ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ΅ΠΉΠΊΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ mockJSON.
certificates: [{
ValidFromDate: #String
ValidToDate: #String
SubjectName: #String
Thumbprint: #String
}]
plugin: {
BuildVersion: #Number
MajorVersion: #Number
MinorVersion: #Number
Version: #String
}
provider: {
BuildVersion: #Number
MajorVersion: #Number
MinorVersion: #Number
Version: #String
Name: #String
}
{
"certificates": [
{
"ValidFromDate": "2017-04-06T05:53:47.000Z",
"ValidToDate": "2018-04-06T05:53:47.000Z",
"SubjectName": "STREET=\"ΡΠ». ΠΡΠΎΠ²Π΅ΡΠΎΡΠ½Π°Ρ, Π΄. 1, Π»ΠΈΡ. Π\", SNILS=12345678901, OGRN=1234567890123, INN=001234567890, E=testov@test.test, C=RU, S=78 Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³, L=Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³, O=Π’Π΅ΡΡΠΎΠ²Π°Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ, OU=ΠΡΠ΄Π΅Π» ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, G=Π’Π΅ΡΡ Π’Π΅ΡΡΠΎΠ²ΠΈΡ, SN=Π’Π΅ΡΡΠΎΠ², T=ΠΠ½ΠΆΠ΅Π½Π΅Ρ-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ, CN=Π’Π΅ΡΡΠΎΠ²Π°Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ",
"Thumbprint": "CC1A530EC972A18FF5A9CD5D5EF319FD86B9E6CF"
},
{
"ValidFromDate": "2017-01-24T07:51:47.000Z",
"ValidToDate": "2017-03-24T07:51:47.000Z",
"SubjectName": "STREET=\"ΡΠ». ΠΡΠΎΠ²Π΅ΡΠΎΡΠ½Π°Ρ, Π΄. 1, Π»ΠΈΡ. Π\", SNILS=12345678901, OGRN=1234567890123, INN=001234567890, E=testov@test.test, C=RU, S=78 Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³, L=Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³, O=Π’Π΅ΡΡΠΎΠ²Π°Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ, OU=ΠΡΠ΄Π΅Π» ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, G=Π’Π΅ΡΡ Π’Π΅ΡΡΠΎΠ²ΠΈΡ, SN=Π’Π΅ΡΡΠΎΠ², T=ΠΠ½ΠΆΠ΅Π½Π΅Ρ-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ, CN=Π’Π΅ΡΡΠΎΠ²Π°Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ",
"Thumbprint": "DA572D0784DB9C95DEAD44D3E2A7D6288CF7A42E"
}
],
"plugin": {
"BuildVersion": 2,
"MajorVersion": 0,
"MinorVersion": 12619,
"Version": "2.0.12619"
},
"provider": {
"BuildVersion": 3,
"MajorVersion": 1,
"MinorVersion": 101,
"Version": "3.1.101",
"Name": "Microsoft RSA/Schannel Cryptographic Provide"
}
}
FAQs
Comfortable api over cadesplugin from cryptopro
The npm package @n3/crypto receives a total of 199 weekly downloads. As such, @n3/crypto popularity was classified as not popular.
We found that @n3/crypto demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 11 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
Socket researchers found 10 typosquatted npm packages that auto-run on install, show fake CAPTCHAs, fingerprint by IP, and deploy a credential stealer.

Product
Socket Firewall Enterprise is now available with flexible deployment, configurable policies, and expanded language support.

Security News
Open source dashboard CNAPulse tracks CVE Numbering Authoritiesβ publishing activity, highlighting trends and transparency across the CVE ecosystem.