owasp-depscan 5.3.5__py3-none-any.whl → 5.4.1__py3-none-any.whl

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.

Potentially problematic release.


This version of owasp-depscan might be problematic. Click here for more details.

depscan/cli.py CHANGED
@@ -80,7 +80,7 @@ def build_args():
80
80
  action="store_true",
81
81
  default=False,
82
82
  dest="no_banner",
83
- help="Do not display banner",
83
+ help="Do not display the logo and donation banner. Please make a donation to OWASP before using this argument.",
84
84
  )
85
85
  parser.add_argument(
86
86
  "--cache",
@@ -137,7 +137,7 @@ def build_args():
137
137
  "--cdxgen-args",
138
138
  default=os.getenv("CDXGEN_ARGS"),
139
139
  dest="cdxgen_args",
140
- help="Additional arguments to pass to cdxgen"
140
+ help="Additional arguments to pass to cdxgen",
141
141
  )
142
142
  parser.add_argument(
143
143
  "--private-ns",
@@ -741,6 +741,7 @@ def main():
741
741
  and generates reports based on the results.
742
742
  """
743
743
  args = build_args()
744
+ perform_risk_audit = args.risk_audit
744
745
  # declare variables that get initialized only conditionally
745
746
  (
746
747
  summary,
@@ -750,21 +751,19 @@ def main():
750
751
  pkg_vulnerabilities,
751
752
  pkg_group_rows,
752
753
  ) = (None, None, None, None, None, None)
753
- if os.getenv("GITHUB_ACTION", "").lower() == "__appthreat_dep-scan-action" \
754
- and not os.getenv("INPUT_THANK_YOU", "") == ("I have sponsored "
755
- "OWASP-dep-scan."):
754
+ if (
755
+ os.getenv("CI")
756
+ and not args.no_banner
757
+ and not os.getenv("INPUT_THANK_YOU", "")
758
+ == ("I have sponsored OWASP-dep-scan.")
759
+ ):
756
760
  console.print(
757
761
  Panel(
758
- "OWASP relies on donations to fund our projects.\n\n"
759
- "Donate at: https://owasp.org/donate/?reponame=www-project"
760
- "-dep-scan&title=OWASP+depscan.\n\nAfter you have done so, "
761
- "make sure you have configured the action with thank_you: 'I "
762
- "have sponsored OWASP-dep-scan.'",
763
- title="Please make a donation",
762
+ "OWASP foundation relies on donations to fund our projects.\nPlease donate at: https://owasp.org/donate/?reponame=www-project-dep-scan&title=OWASP+depscan",
763
+ title="Donate to the OWASP Foundation",
764
764
  expand=False,
765
765
  )
766
766
  )
767
- sys.exit(1)
768
767
  # Should we turn on the debug mode
769
768
  if args.enable_debug:
770
769
  os.environ["AT_DEBUG_MODE"] = "debug"
@@ -808,6 +807,8 @@ def main():
808
807
  if args.project_type:
809
808
  project_types_list = args.project_type.split(",")
810
809
  elif args.search_purl:
810
+ # Automatically enable risk audit for single purl searches
811
+ perform_risk_audit = True
811
812
  purl_obj = parse_purl(args.search_purl)
812
813
  purl_obj["purl"] = args.search_purl
813
814
  purl_obj["vendor"] = purl_obj.get("namespace")
@@ -870,7 +871,11 @@ def main():
870
871
  bom_file,
871
872
  src_dir,
872
873
  args.deep_scan,
873
- {"cdxgen_server": args.cdxgen_server, "profile": args.profile, "cdxgen_args": args.cdxgen_args},
874
+ {
875
+ "cdxgen_server": args.cdxgen_server,
876
+ "profile": args.profile,
877
+ "cdxgen_args": args.cdxgen_args,
878
+ },
874
879
  )
875
880
  if not creation_status:
876
881
  LOG.debug("Bom file %s was not created successfully", bom_file)
@@ -903,16 +908,17 @@ def main():
903
908
  project_type, licenses_results, license_report_file
904
909
  )
905
910
  if project_type in risk_audit_map:
906
- if args.risk_audit:
907
- console.print(
908
- Panel(
909
- f"Performing OSS Risk Audit for packages from "
910
- f"{src_dir}\nNo of packages [bold]{len(pkg_list)}"
911
- f"[/bold]. This will take a while ...",
912
- title="OSS Risk Audit",
913
- expand=False,
911
+ if perform_risk_audit:
912
+ if len(pkg_list) > 1:
913
+ console.print(
914
+ Panel(
915
+ f"Performing OSS Risk Audit for packages from "
916
+ f"{src_dir}\nNo of packages [bold]{len(pkg_list)}"
917
+ f"[/bold]. This will take a while ...",
918
+ title="OSS Risk Audit",
919
+ expand=False,
920
+ )
914
921
  )
915
- )
916
922
  try:
917
923
  risk_results = risk_audit(
918
924
  project_type,
@@ -995,7 +1001,7 @@ def main():
995
1001
  github_client = github.GitHub(github_token)
996
1002
 
997
1003
  if not github_client.can_authenticate():
998
- LOG.error(
1004
+ LOG.info(
999
1005
  "The GitHub personal access token supplied appears to be invalid or expired. Please see: https://github.com/owasp-dep-scan/dep-scan#github-security-advisory"
1000
1006
  )
1001
1007
  else:
@@ -1021,11 +1027,12 @@ def main():
1021
1027
  except NotImplementedError:
1022
1028
  pass
1023
1029
  run_cacher = False
1024
- LOG.info(
1025
- "Performing regular scan for %s using plugin %s",
1026
- src_dir,
1027
- project_type,
1028
- )
1030
+ if len(pkg_list) > 1:
1031
+ LOG.info(
1032
+ "Performing regular scan for %s using plugin %s",
1033
+ src_dir,
1034
+ project_type,
1035
+ )
1029
1036
  vdb_results, pkg_aliases, sug_version_dict, purl_aliases = scan(
1030
1037
  db, project_type, pkg_list, args.suggest
1031
1038
  )
@@ -1071,9 +1078,9 @@ def main():
1071
1078
  )
1072
1079
  console.save_html(
1073
1080
  html_file,
1074
- theme=MONOKAI
1075
- if os.getenv("USE_DARK_THEME")
1076
- else DEFAULT_TERMINAL_THEME,
1081
+ theme=(
1082
+ MONOKAI if os.getenv("USE_DARK_THEME") else DEFAULT_TERMINAL_THEME
1083
+ ),
1077
1084
  )
1078
1085
  utils.export_pdf(html_file, pdf_file)
1079
1086
  # render report into template if wished
depscan/lib/analysis.py CHANGED
@@ -235,8 +235,7 @@ def is_lang_sw_edition(package_issue):
235
235
  return True
236
236
  if (
237
237
  config.LANG_PKG_TYPES.get(all_parts.group("sw_edition"))
238
- or all_parts.group("sw_edition")
239
- in config.LANG_PKG_TYPES.values()
238
+ or all_parts.group("sw_edition") in config.LANG_PKG_TYPES.values()
240
239
  ):
241
240
  return True
242
241
  return False
@@ -306,6 +305,7 @@ def prepare_vdr(options: PrepareVdrOptions):
306
305
  fp_count = 0
307
306
  pkg_attention_count = 0
308
307
  critical_count = 0
308
+ malicious_count = 0
309
309
  has_poc_count = 0
310
310
  has_reachable_poc_count = 0
311
311
  has_exploit_count = 0
@@ -376,6 +376,10 @@ def prepare_vdr(options: PrepareVdrOptions):
376
376
  package_type = None
377
377
  insights = []
378
378
  plain_insights = []
379
+ if vid.startswith("MAL-"):
380
+ insights.append("[bright_red]:stop_sign: Malicious[/bright_red]")
381
+ plain_insights.append("Malicious")
382
+ malicious_count += 1
379
383
  purl_obj = None
380
384
  vendor = package_issue["affected_location"].get("vendor")
381
385
  # If the match was based on name and version alone then the alias might legitimately lack a full purl
@@ -401,7 +405,13 @@ def prepare_vdr(options: PrepareVdrOptions):
401
405
  package_type = purl_obj.get("type")
402
406
  qualifiers = purl_obj.get("qualifiers", {})
403
407
  # Filter application CVEs from distros
404
- if (config.LANG_PKG_TYPES.get(package_type) or package_type in config.LANG_PKG_TYPES.values()) and ((vendor and vendor in config.OS_PKG_TYPES) or not is_lang_sw_edition(package_issue)):
408
+ if (
409
+ config.LANG_PKG_TYPES.get(package_type)
410
+ or package_type in config.LANG_PKG_TYPES.values()
411
+ ) and (
412
+ (vendor and vendor in config.OS_PKG_TYPES)
413
+ or not is_lang_sw_edition(package_issue)
414
+ ):
405
415
  fp_count += 1
406
416
  continue
407
417
  if package_type in config.OS_PKG_TYPES:
@@ -760,7 +770,18 @@ Below are the vulnerabilities prioritized by depscan. Follow your team's remedia
760
770
  console.print()
761
771
  console.print(utable)
762
772
  console.print()
763
- if options.scoped_pkgs or has_exploit_count:
773
+ if malicious_count:
774
+ rmessage = ":stop_sign: Malicious package found! Treat this as a [bold]security incident[/bold] and follow your organization's playbook to remove this package from all affected applications."
775
+ if malicious_count > 1:
776
+ rmessage = f":stop_sign: {malicious_count} malicious packages found in this project! Treat this as a [bold]security incident[/bold] and follow your organization's playbook to remove the packages from all affected applications."
777
+ console.print(
778
+ Panel(
779
+ rmessage,
780
+ title="Action Required",
781
+ expand=False,
782
+ )
783
+ )
784
+ elif options.scoped_pkgs or has_exploit_count:
764
785
  if not pkg_attention_count and has_exploit_count:
765
786
  if has_reachable_exploit_count:
766
787
  rmessage = (
@@ -898,18 +919,19 @@ Below are the vulnerabilities prioritized by depscan. Follow your team's remedia
898
919
  this result."""
899
920
  console.print(Panel(rmessage, title="Recommendation"))
900
921
  else:
901
- rmessage = ":white_check_mark: No package requires immediate attention."
922
+ rmessage = None
902
923
  if reached_purls:
903
924
  rmessage = ":white_check_mark: No package requires immediate attention since the major vulnerabilities are not reachable."
904
925
  elif direct_purls:
905
926
  rmessage = ":white_check_mark: No package requires immediate attention since the major vulnerabilities are found only in dev packages and indirect dependencies."
906
- console.print(
907
- Panel(
908
- rmessage,
909
- title="Recommendation",
910
- expand=False,
927
+ if rmessage:
928
+ console.print(
929
+ Panel(
930
+ rmessage,
931
+ title="Recommendation",
932
+ expand=False,
933
+ )
911
934
  )
912
- )
913
935
  elif critical_count:
914
936
  console.print(
915
937
  Panel(
@@ -919,14 +941,6 @@ Below are the vulnerabilities prioritized by depscan. Follow your team's remedia
919
941
  expand=False,
920
942
  )
921
943
  )
922
- else:
923
- console.print(
924
- Panel(
925
- ":white_check_mark: No package requires immediate attention.",
926
- title="Recommendation",
927
- expand=False,
928
- )
929
- )
930
944
  if reached_purls:
931
945
  sorted_reached_purls = sorted(
932
946
  ((value, key) for (key, value) in reached_purls.items()),
@@ -1329,12 +1343,14 @@ def analyse_licenses(project_type, licenses_results, license_report_file=None):
1329
1343
  data = [
1330
1344
  *pkg_ver,
1331
1345
  "{}{}".format(
1332
- "[cyan]"
1333
- if "GPL" in lic["spdx-id"]
1334
- or "CC-BY-" in lic["spdx-id"]
1335
- or "Facebook" in lic["spdx-id"]
1336
- or "WTFPL" in lic["spdx-id"]
1337
- else "",
1346
+ (
1347
+ "[cyan]"
1348
+ if "GPL" in lic["spdx-id"]
1349
+ or "CC-BY-" in lic["spdx-id"]
1350
+ or "Facebook" in lic["spdx-id"]
1351
+ or "WTFPL" in lic["spdx-id"]
1352
+ else ""
1353
+ ),
1338
1354
  lic["spdx-id"],
1339
1355
  ),
1340
1356
  conditions_str,
depscan/lib/pkg_query.py CHANGED
@@ -1,5 +1,6 @@
1
1
  import math
2
2
  from datetime import datetime
3
+ from semver import Version
3
4
 
4
5
  import httpx
5
6
  from rich.progress import Progress
@@ -40,7 +41,9 @@ def get_lookup_url(registry_type, pkg):
40
41
  return None, None
41
42
 
42
43
 
43
- def metadata_from_registry(registry_type, scoped_pkgs, pkg_list, private_ns=None):
44
+ def metadata_from_registry(
45
+ registry_type, scoped_pkgs, pkg_list, private_ns=None
46
+ ):
44
47
  """
45
48
  Method to query registry for the package metadata
46
49
 
@@ -64,7 +67,9 @@ def metadata_from_registry(registry_type, scoped_pkgs, pkg_list, private_ns=None
64
67
  redirect_stdout=False,
65
68
  refresh_per_second=1,
66
69
  ) as progress:
67
- task = progress.add_task("[green] Auditing packages", total=len(pkg_list))
70
+ task = progress.add_task(
71
+ "[green] Auditing packages", total=len(pkg_list)
72
+ )
68
73
  for pkg in pkg_list:
69
74
  if circuit_breaker:
70
75
  LOG.info(
@@ -96,14 +101,16 @@ def metadata_from_registry(registry_type, scoped_pkgs, pkg_list, private_ns=None
96
101
  if private_ns:
97
102
  namespace_prefixes = private_ns.split(",")
98
103
  for ns in namespace_prefixes:
99
- if key.lower().startswith(ns.lower()) or key.lower().startswith(
100
- "@" + ns.lower()
101
- ):
104
+ if key.lower().startswith(
105
+ ns.lower()
106
+ ) or key.lower().startswith("@" + ns.lower()):
102
107
  is_private_pkg = True
103
108
  break
104
109
  risk_metrics = {}
105
110
  if registry_type == "npm":
106
- risk_metrics = npm_pkg_risk(json_data, is_private_pkg, scope)
111
+ risk_metrics = npm_pkg_risk(
112
+ json_data, is_private_pkg, scope
113
+ )
107
114
  elif registry_type == "pypi":
108
115
  project_type_pkg = f"python:{key}".lower()
109
116
  required_pkgs = scoped_pkgs.get("required", [])
@@ -124,7 +131,9 @@ def metadata_from_registry(registry_type, scoped_pkgs, pkg_list, private_ns=None
124
131
  or project_type_pkg in excluded_pkgs
125
132
  ):
126
133
  scope = "excluded"
127
- risk_metrics = pypi_pkg_risk(json_data, is_private_pkg, scope)
134
+ risk_metrics = pypi_pkg_risk(
135
+ json_data, is_private_pkg, scope, pkg
136
+ )
128
137
  metadata_dict[key] = {
129
138
  "scope": scope,
130
139
  "pkg_metadata": json_data,
@@ -269,14 +278,16 @@ def compute_time_risks(
269
278
  # Check if the package is at least 1 year old. Quarantine period.
270
279
  if created_now_diff.total_seconds() < config.created_now_quarantine_seconds:
271
280
  risk_metrics["created_now_quarantine_seconds_risk"] = True
272
- risk_metrics[
273
- "created_now_quarantine_seconds_value"
274
- ] = latest_now_diff.total_seconds()
281
+ risk_metrics["created_now_quarantine_seconds_value"] = (
282
+ latest_now_diff.total_seconds()
283
+ )
275
284
 
276
285
  # Check for the maximum seconds difference between latest version and now
277
286
  if latest_now_diff.total_seconds() > config.latest_now_max_seconds:
278
287
  risk_metrics["latest_now_max_seconds_risk"] = True
279
- risk_metrics["latest_now_max_seconds_value"] = latest_now_diff.total_seconds()
288
+ risk_metrics["latest_now_max_seconds_value"] = (
289
+ latest_now_diff.total_seconds()
290
+ )
280
291
  # Since the package is quite old we can relax the min versions risk
281
292
  risk_metrics["pkg_min_versions_risk"] = False
282
293
  else:
@@ -287,17 +298,19 @@ def compute_time_risks(
287
298
  # packages
288
299
  if mod_create_diff.total_seconds() < config.mod_create_min_seconds:
289
300
  risk_metrics["mod_create_min_seconds_risk"] = True
290
- risk_metrics[
291
- "mod_create_min_seconds_value"
292
- ] = mod_create_diff.total_seconds()
301
+ risk_metrics["mod_create_min_seconds_value"] = (
302
+ mod_create_diff.total_seconds()
303
+ )
293
304
  # Check for the minimum seconds difference between latest version and now
294
305
  if latest_now_diff.total_seconds() < config.latest_now_min_seconds:
295
306
  risk_metrics["latest_now_min_seconds_risk"] = True
296
- risk_metrics["latest_now_min_seconds_value"] = latest_now_diff.total_seconds()
307
+ risk_metrics["latest_now_min_seconds_value"] = (
308
+ latest_now_diff.total_seconds()
309
+ )
297
310
  return risk_metrics
298
311
 
299
312
 
300
- def pypi_pkg_risk(pkg_metadata, is_private_pkg, scope):
313
+ def pypi_pkg_risk(pkg_metadata, is_private_pkg, scope, pkg):
301
314
  """
302
315
  Calculate various package risks based on the metadata from pypi.
303
316
 
@@ -319,15 +332,38 @@ def pypi_pkg_risk(pkg_metadata, is_private_pkg, scope):
319
332
  versions_dict = pkg_metadata.get("releases", {})
320
333
  versions = [ver[0] for k, ver in versions_dict.items() if ver]
321
334
  is_deprecated = info.get("yanked") and info.get("yanked_reason")
335
+ if not is_deprecated and pkg and pkg.get("version"):
336
+ theversion = versions_dict.get(pkg.get("version"), [])
337
+ if isinstance(theversion, list):
338
+ theversion = theversion[0]
339
+ if theversion.get("yanked"):
340
+ is_deprecated = True
322
341
  # Some packages like pypi:azure only mention deprecated in the description
323
342
  # without yanking the package
324
343
  pkg_description = info.get("description", "").lower()
325
- if not is_deprecated and ("is deprecated" in pkg_description or "no longer maintained" in pkg_description):
344
+ if not is_deprecated and (
345
+ "is deprecated" in pkg_description
346
+ or "no longer maintained" in pkg_description
347
+ ):
326
348
  is_deprecated = True
327
349
  latest_deprecated = False
328
- first_version = None
329
- latest_version = None
330
-
350
+ version_nums = list(versions_dict.keys())
351
+ # Ignore empty versions without metadata. Thanks pypi
352
+ version_nums = [ver for ver in version_nums if versions_dict.get(ver)]
353
+ try:
354
+ first_version_num = min(
355
+ version_nums,
356
+ key=lambda x: Version.parse(x, optional_minor_and_patch=True),
357
+ )
358
+ latest_version_num = max(
359
+ version_nums,
360
+ key=lambda x: Version.parse(x, optional_minor_and_patch=True),
361
+ )
362
+ except (ValueError, TypeError):
363
+ first_version_num = version_nums[0]
364
+ latest_version_num = version_nums[-1]
365
+ first_version = versions_dict.get(first_version_num)[0]
366
+ latest_version = versions_dict.get(latest_version_num)[0]
331
367
  # Is the private package available publicly? Dependency confusion.
332
368
  if is_private_pkg and pkg_metadata:
333
369
  risk_metrics["pkg_private_on_public_registry_risk"] = True
@@ -338,8 +374,6 @@ def pypi_pkg_risk(pkg_metadata, is_private_pkg, scope):
338
374
  if len(versions) < config.pkg_min_versions:
339
375
  risk_metrics["pkg_min_versions_risk"] = True
340
376
  risk_metrics["pkg_min_versions_value"] = len(versions)
341
- first_version = versions[0]
342
- latest_version = versions[-1]
343
377
  # Check if the latest version is deprecated
344
378
  if latest_version and latest_version.get("yanked"):
345
379
  latest_deprecated = True
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: owasp-depscan
3
- Version: 5.3.5
3
+ Version: 5.4.1
4
4
  Summary: Fully open-source security audit for project dependencies based on known vulnerabilities and advisories.
5
5
  Author-email: Team AppThreat <cloud@appthreat.com>
6
6
  License: MIT
@@ -20,7 +20,7 @@ Classifier: Topic :: Utilities
20
20
  Requires-Python: >=3.8
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE
23
- Requires-Dist: appthreat-vulnerability-db ==5.6.8
23
+ Requires-Dist: appthreat-vulnerability-db ==5.7.1
24
24
  Requires-Dist: defusedxml
25
25
  Requires-Dist: oras ~=0.1.26
26
26
  Requires-Dist: PyYAML
@@ -138,27 +138,6 @@ oras pull ghcr.io/owasp-dep-scan/depscan:v4 -o $VDB_HOME
138
138
 
139
139
  Use `vdb-10y` which is a larger database with vulnerability data spanning the last 10 years from 2014. In contrast, vdb with a starting year of 2018 is appropriate for most users.
140
140
 
141
- ### Single binary executables
142
-
143
- Download the executable binary for your operating system from the [releases page](https://github.com/owasp-dep-scan/depscan-bin/releases). These binary bundle the following:
144
-
145
- - dep-scan with Python 3.11
146
- - cdxgen with Node.js 21
147
- - cdxgen binary plugins
148
-
149
- ```bash
150
- curl -LO https://github.com/owasp-dep-scan/depscan-bin/releases/latest/download/depscan-linux-amd64
151
- chmod +x depscan-linux-amd64
152
- ./depscan-linux-amd64 --help
153
- ```
154
-
155
- On Windows,
156
-
157
- ```powershell
158
- curl -LO https://github.com/owasp-dep-scan/depscan-bin/releases/latest/download/depscan.exe
159
- .\depscan.exe --help
160
- ```
161
-
162
141
  ### Server mode
163
142
 
164
143
  dep-scan and cdxgen could be run in server mode. Use the included docker-compose file to get started.
@@ -190,19 +169,14 @@ Use the `/scan` endpoint to perform scans.
190
169
  curl --json '{"path": "/tmp/vulnerable-aws-koa-app", "type": "js"}' http://0.0.0.0:7070/scan
191
170
  ```
192
171
 
193
- - Scanning a SBOM file (present locally).
172
+ - Scanning an SBOM file (present locally).
194
173
 
195
174
  ```bash
196
175
  curl --json '{"path": "/tmp/vulnerable-aws-koa-app/sbom_file.json", "type": "js"}' http://0.0.0.0:7070/scan
197
176
  ```
198
177
 
199
178
  - Scanning a GitHub repo.
200
-
201
- ```bash
202
- curl --json '{"url": "https://github.com/HooliCorp/vulnerable-aws-koa-app", "type": "js"}' http://0.0.0.0:7070/scan -o app.vdr.json
203
- ```
204
-
205
- - Uploading a SBOM file and generating results based on it.
179
+ Uploading an SBOM file and generating results based on it.
206
180
 
207
181
  ```bash
208
182
  curl -X POST -H 'Content-Type: multipart/form-data' -F 'file=@/tmp/app/sbom_file.json' http://0.0.0.0:7070/scan?type=js
@@ -307,7 +281,7 @@ You can also specify the image using the sha256 digest
307
281
  depscan --src redmine@sha256:a5c5f8a64a0d9a436a0a6941bc3fb156be0c89996add834fe33b66ebeed2439e -o containertests/depscan-redmine.json -t docker
308
282
  ```
309
283
 
310
- You can also save container images using docker or podman save command and pass the archive to depscan for scanning.
284
+ You can also save container images using the docker or podman save command and pass the archive to depscan for scanning.
311
285
 
312
286
  ```bash
313
287
  docker save -o /tmp/scanslim.tar shiftleft/scan-slim:latest
@@ -1,7 +1,7 @@
1
1
  depscan/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- depscan/cli.py,sha256=Ao4FB_vZODe6-dOzAwGJ_6fGKgx4oXPfBQR-j-nfxcg,39048
2
+ depscan/cli.py,sha256=WQ_EbQgkwW0h1L-7otvaG8mLFqpk4r8n8YCPjHcCE1M,39240
3
3
  depscan/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- depscan/lib/analysis.py,sha256=Zlm_BhmassmosM0yYazXUXNflhSgsrVvNTQtAoVIChU,59180
4
+ depscan/lib/analysis.py,sha256=jzDtf-BvmvH3uD0v7r1pVPU-kiIxcBZEpcwEZYP97xA,60013
5
5
  depscan/lib/audit.py,sha256=wpmIowFLaoFs0agZN3FUFxPumty5Gr6YRfcjXGsuNcI,1497
6
6
  depscan/lib/bom.py,sha256=MuHBCAt0tQ7LKwuDyMlxi0yCrMA6jI7tV81bFslU3S4,16822
7
7
  depscan/lib/config.py,sha256=5kAUh3BfH6Ngu0NY4CDVeNq0Rykk9yWaOh2sd3JWu9c,14627
@@ -12,7 +12,7 @@ depscan/lib/license.py,sha256=y4-WZuD2MOunKaLd2EJGcSYP6s3Lp_dgssdzhcl9eEM,2332
12
12
  depscan/lib/logger.py,sha256=TZkxVN2a5g2g0nOlrIodJWaDhTFT6JLtR1vR4fPSMgs,1605
13
13
  depscan/lib/normalize.py,sha256=SuGKTKK4aFaORC3dz7RSEEBBN4vRDv0Gq55F18BeDOw,12604
14
14
  depscan/lib/orasclient.py,sha256=l8Diieh0I2thTova4ozUkMblgyhRsttAkarnkRemsn0,4960
15
- depscan/lib/pkg_query.py,sha256=6_bsKSRA2kY5_2HAWV4izEm4qm97fxQeBojkRjX_bVk,20394
15
+ depscan/lib/pkg_query.py,sha256=hOZGtWR4xXaGjoy2x8nzp3chSqywroAT6kNE8iI9Y1s,21494
16
16
  depscan/lib/utils.py,sha256=KUQPzjeQYIcjobDakCcbul93Sx74WEqTa_cINmy5620,14844
17
17
  vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  vendor/choosealicense.com/_data/fields.yml,sha256=ydNsITXFUuADzGPM-jcUcJnN0r_qSGgH51oV27nX3Qs,819
@@ -23,6 +23,8 @@ vendor/choosealicense.com/_licenses/afl-3.0.txt,sha256=geEcMDR01aeoPeGCdJ_JjZ4Mf
23
23
  vendor/choosealicense.com/_licenses/agpl-3.0.txt,sha256=Kh_aeCNLcVAuLPgDUCG1WS9eun6BByKKyk2Vu6ZF45c,35944
24
24
  vendor/choosealicense.com/_licenses/apache-2.0.txt,sha256=YJ4stZn4SqpB2O8p2P2wTRZPqyLo2Skso0pZnQ9Wozg,12624
25
25
  vendor/choosealicense.com/_licenses/artistic-2.0.txt,sha256=Yv9JWPxIuOcT9VDW97f9iaOq9UuSWN9XPlM4k6iBiSE,9649
26
+ vendor/choosealicense.com/_licenses/blueoak-1.0.0.txt,sha256=WMrD25uYhI6ZAS-quCcDghSxt5y3cZWymKSdHJpZkmQ,2422
27
+ vendor/choosealicense.com/_licenses/bsd-2-clause-patent.txt,sha256=Nun0tMNvQE8EQ9OYuu4__J_oCv9PRefJH7TjCWWBZnk,3497
26
28
  vendor/choosealicense.com/_licenses/bsd-2-clause.txt,sha256=2CN9FlwXZBaoq5OL9-Eg2PNFCYFj_OyQF8VlL0Z_7K8,2260
27
29
  vendor/choosealicense.com/_licenses/bsd-3-clause-clear.txt,sha256=dCbal-fEXLo_-tWO4A3qAhDdvw3RFM1mU2UGuGaA4ug,2348
28
30
  vendor/choosealicense.com/_licenses/bsd-3-clause.txt,sha256=cy5lPWtX2D7pvSH_U8bdHrMyYozv0F30uZ1SNyff9mQ,2505
@@ -41,7 +43,7 @@ vendor/choosealicense.com/_licenses/epl-2.0.txt,sha256=k8c7FnhGevhW5D3E58w0aZGrG
41
43
  vendor/choosealicense.com/_licenses/eupl-1.1.txt,sha256=k1y6FMqr2-lPUTeTgKpEgEGk6q_v-TswB2rvXgu109A,14163
42
44
  vendor/choosealicense.com/_licenses/eupl-1.2.txt,sha256=g69vd8dLnaYBrm_DXbS6kMZRsdp1x139JE7JPG8BqOI,14871
43
45
  vendor/choosealicense.com/_licenses/gfdl-1.3.txt,sha256=VnY42BXt5eNoitz-BG0cdiBCOVxfzgWrC7_4NmtCzhg,23969
44
- vendor/choosealicense.com/_licenses/gpl-2.0.txt,sha256=RzSJ5g8eK_29u2Ph4hWNHEhlzFXRT3eRzZ-Nopu-ZJc,19293
46
+ vendor/choosealicense.com/_licenses/gpl-2.0.txt,sha256=H3eZKPhduHF2f5ZpnEmsSfHU8XfEOg_gyp82UmnXjnk,19289
45
47
  vendor/choosealicense.com/_licenses/gpl-3.0.txt,sha256=ivpMzXTTmo2oybHggg4Y54-kqIbxr-lxwMnb5kThTnY,36394
46
48
  vendor/choosealicense.com/_licenses/isc.txt,sha256=jqksnoAbEeEwMXPDzj_FZrvh7elhkKr_vFoMl3EhRsg,1744
47
49
  vendor/choosealicense.com/_licenses/lgpl-2.1.txt,sha256=AJT_fStEUdIjHNDCCyeYV0wpvIHvdA1xmpkJqr2G1jM,27491
@@ -59,14 +61,14 @@ vendor/choosealicense.com/_licenses/ofl-1.1.txt,sha256=rfABl7lxjv8qg1PN1kvFYFWF2
59
61
  vendor/choosealicense.com/_licenses/osl-3.0.txt,sha256=4q1Y0uGQtIOD88Z1B4sc6wzJ9ztzRieUglrKqUSiK_s,11580
60
62
  vendor/choosealicense.com/_licenses/postgresql.txt,sha256=LTaJOLi4f7dA3DRsx2t4F267JuOSvHzJz5SJ7Pdpn5U,1709
61
63
  vendor/choosealicense.com/_licenses/unlicense.txt,sha256=3cLgcN8LslzpUbCVTZwbXSKxfxUNWOrGa9plPQRLte0,2001
62
- vendor/choosealicense.com/_licenses/upl-1.0.txt,sha256=fUjnD9-De6RIsp29l6RNDD_sg2WIM0DvhKgkhrRYR_A,3252
64
+ vendor/choosealicense.com/_licenses/upl-1.0.txt,sha256=yJ3mfZkFmzSHesz6uOF9S0fX6hkCVMhr7rmgUdGL2vc,3253
63
65
  vendor/choosealicense.com/_licenses/vim.txt,sha256=d5GQjXB328L8EBkhKgxcjk344D3K7UfcJmP1barrhHI,6119
64
66
  vendor/choosealicense.com/_licenses/wtfpl.txt,sha256=BxXeubkvQm32MDmlZsBcbzJzBpR5kWgw0JxSR9d7f3k,948
65
67
  vendor/choosealicense.com/_licenses/zlib.txt,sha256=e6dfCeLhxD3NCnIkY4cVIagRaWdRvencjNhHZ1APvpc,1678
66
- vendor/spdx/json/licenses.json,sha256=_Vz_aACEg-giVk08ZBQLqB5Z3AnSWZmdD9I22ID3QNs,275192
67
- owasp_depscan-5.3.5.dist-info/LICENSE,sha256=oQnCbnZtJ_NLDdOLc-rVY1D1N0RNWLHPpYXcc77xzSo,1073
68
- owasp_depscan-5.3.5.dist-info/METADATA,sha256=6Lg__90CPIFvjOp1fX9favjGowfN3ynrdEAAOHqzJCE,28091
69
- owasp_depscan-5.3.5.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
70
- owasp_depscan-5.3.5.dist-info/entry_points.txt,sha256=FxQKHFWZTfKU2eBxHPFRxwhSNexntYygYhquykS8zxA,69
71
- owasp_depscan-5.3.5.dist-info/top_level.txt,sha256=qbHOZvNU2dXANv946hMdP2vOi0ESQB5t2ZY5ktKtXvQ,15
72
- owasp_depscan-5.3.5.dist-info/RECORD,,
68
+ vendor/spdx/json/licenses.json,sha256=JFXWP7m8we70m62f5b144908LnHDGZn0A_5zjNxnyuI,300252
69
+ owasp_depscan-5.4.1.dist-info/LICENSE,sha256=oQnCbnZtJ_NLDdOLc-rVY1D1N0RNWLHPpYXcc77xzSo,1073
70
+ owasp_depscan-5.4.1.dist-info/METADATA,sha256=iwpGflRb0Jk-ElFkvd4-rIug8m5Dlxb_3pKqZq7jeG8,27345
71
+ owasp_depscan-5.4.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
72
+ owasp_depscan-5.4.1.dist-info/entry_points.txt,sha256=FxQKHFWZTfKU2eBxHPFRxwhSNexntYygYhquykS8zxA,69
73
+ owasp_depscan-5.4.1.dist-info/top_level.txt,sha256=qbHOZvNU2dXANv946hMdP2vOi0ESQB5t2ZY5ktKtXvQ,15
74
+ owasp_depscan-5.4.1.dist-info/RECORD,,
@@ -0,0 +1,84 @@
1
+ ---
2
+ title: Blue Oak Model License 1.0.0
3
+ spdx-id: BlueOak-1.0.0
4
+
5
+ description: A permissive license whose main conditions require providing notice of the license. Contributors provide an express grant of patent rights. Licensed works, modifications, and larger works may be distributed under different terms and without source code.
6
+
7
+ how: Create a text file (typically named LICENSE.md) in the root of your source code and copy the text of the license into the file.
8
+
9
+ using:
10
+ drone-gc: https://github.com/drone/drone-gc/blob/master/LICENSE.md
11
+ oh-my-git: https://github.com/git-learning-game/oh-my-git/blob/main/LICENSE.md
12
+ punct: https://github.com/otherjoel/punct/blob/main/LICENSE.md
13
+
14
+ permissions:
15
+ - commercial-use
16
+ - modifications
17
+ - distribution
18
+ - patent-use
19
+ - private-use
20
+
21
+ conditions:
22
+ - include-copyright
23
+
24
+ limitations:
25
+ - liability
26
+ - warranty
27
+
28
+ ---
29
+
30
+ # Blue Oak Model License
31
+
32
+ Version 1.0.0
33
+
34
+ ## Purpose
35
+
36
+ This license gives everyone as much permission to work with
37
+ this software as possible, while protecting contributors
38
+ from liability.
39
+
40
+ ## Acceptance
41
+
42
+ In order to receive this license, you must agree to its
43
+ rules. The rules of this license are both obligations
44
+ under that agreement and conditions to your license.
45
+ You must not do anything with this software that triggers
46
+ a rule that you cannot or will not follow.
47
+
48
+ ## Copyright
49
+
50
+ Each contributor licenses you to do everything with this
51
+ software that would otherwise infringe that contributor's
52
+ copyright in it.
53
+
54
+ ## Notices
55
+
56
+ You must ensure that everyone who gets a copy of
57
+ any part of this software from you, with or without
58
+ changes, also gets the text of this license or a link to
59
+ <https://blueoakcouncil.org/license/1.0.0>.
60
+
61
+ ## Excuse
62
+
63
+ If anyone notifies you in writing that you have not
64
+ complied with [Notices](#notices), you can keep your
65
+ license by taking all practical steps to comply within 30
66
+ days after the notice. If you do not do so, your license
67
+ ends immediately.
68
+
69
+ ## Patent
70
+
71
+ Each contributor licenses you to do everything with this
72
+ software that would otherwise infringe any patent claims
73
+ they can license or become able to license.
74
+
75
+ ## Reliability
76
+
77
+ No contributor can revoke this license.
78
+
79
+ ## No Liability
80
+
81
+ ***As far as the law allows, this software comes as is,
82
+ without any warranty or condition, and no contributor
83
+ will be liable to anyone for any damages related to this
84
+ software or this license, under any kind of legal claim.***