UnsafeChecksum

Struct UnsafeChecksum 

Source
pub struct UnsafeChecksum {}
Expand description

§What it does

Ensures that each alpm-package-source-checksum in SRCINFO data uses a safe hash function.

§Why is this bad?

Upstream artifacts are validated against hash digests (see alpm-package-source-checksum) set in PKGBUILD and SRCINFO files.

Some hash functions (e.g. MD-5 and SHA-1) used for creating these hash digests are unsafe to use from a cryptographic perspective. These algorithms should be avoided to prevent hash collisions and potential abuse.

Using unsafe hash algorithms allows attackers to craft malicious artifacts that pass the checksum check. Further, attackers could swap existing artifacts with these malicious artifacts and compromise a package on (re)build.

§Example

pkgbase = test
    pkgver = 1.0.0
    pkgrel = 1
    arch = x86_64
    source = https://domain.tld/testing/x86_64_test.tar.gz
    md5sums = 10245815f893d79f3d779690774f0b43

Use instead:

pkgbase = test
    pkgver = 1.0.0
    pkgrel = 1
    arch = x86_64
    source = https://domain.tld/testing/x86_64_test.tar.gz
    sha512sums = 1816c57b4abf31eb7c57a66bfb0f0ee5cef9398b5e4cc303468e08dae2702da55978402da94673e444f8c02754e94dedef4d12450319383c3a481d1c5cd90c82

Implementations§

Source§

impl UnsafeChecksum

Source

pub fn new_boxed(_: &LintRuleConfiguration) -> Box<dyn LintRule>

Create a new, boxed instance of UnsafeChecksum.

Source

fn create_checksum_issue( &self, field_name: &str, value: &str, architecture: Option<SystemArchitecture>, ) -> LintIssue

Helper function to create a lint issue for unsafe checksum field.

Trait Implementations§

Source§

impl Clone for UnsafeChecksum

Source§

fn clone(&self) -> UnsafeChecksum

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for UnsafeChecksum

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Documented for UnsafeChecksum

Source§

const DOCS: &'static str = "# What it does\n\nEnsures that each [alpm-package-source-checksum] in [SRCINFO] data uses a safe hash function.\n\n# Why is this bad?\n\nUpstream artifacts are validated against hash digests (see [alpm-package-source-checksum]) set\nin [PKGBUILD] and [SRCINFO] files.\n\nSome [hash functions] (e.g. [MD-5] and [SHA-1]) used for creating these hash digests are unsafe\nto use from a cryptographic perspective. These algorithms should be avoided to prevent hash\ncollisions and potential abuse.\n\nUsing unsafe hash algorithms allows attackers to craft malicious artifacts that pass the\nchecksum check. Further, attackers could swap existing artifacts with these malicious artifacts\nand compromise a package on (re)build.\n\n# Example\n\n```ini,ignore\npkgbase = test\npkgver = 1.0.0\npkgrel = 1\narch = x86_64\nsource = https://domain.tld/testing/x86_64_test.tar.gz\nmd5sums = 10245815f893d79f3d779690774f0b43\n```\n\nUse instead:\n\n```ini,ignore\npkgbase = test\npkgver = 1.0.0\npkgrel = 1\narch = x86_64\nsource = https://domain.tld/testing/x86_64_test.tar.gz\nsha512sums = 1816c57b4abf31eb7c57a66bfb0f0ee5cef9398b5e4cc303468e08dae2702da55978402da94673e444f8c02754e94dedef4d12450319383c3a481d1c5cd90c82\n```\n\n[MD-5]: https://en.wikipedia.org/wiki/MD-5\n[PKGBUILD]: https://man.archlinux.org/man/PKGBUILD.5\n[RFC 0046]: https://rfc.archlinux.page/0046-upstream-package-sources/\n[SHA-1]: https://en.wikipedia.org/wiki/SHA-1\n[SRCINFO]: https://alpm.archlinux.page/specifications/SRCINFO.5.html\n[alpm-package-source-checksum]: https://alpm.archlinux.page/specifications/alpm-package-source-checksum.7.html\n[hash functions]: https://en.wikipedia.org/wiki/Hash_function"

The static doc comments on this type.
Source§

impl LintRule for UnsafeChecksum

Source§

fn name(&self) -> &'static str

Returns the name of this lint rule. Read more
Source§

fn scope(&self) -> LintScope

Return the scope of this lint rule. Read more
Source§

fn level(&self) -> Level

The severity level of this lint rule. Read more
Source§

fn documentation(&self) -> String

Returns the full documentation for this lint rule. Read more
Source§

fn help_text(&self) -> String

Returns the help text for this lint rule. Read more
Source§

fn run( &self, resources: &Resources, issues: &mut Vec<LintIssue>, ) -> Result<(), Error>

Executes the linting logic and appends to list of accumulated issues. Read more
Source§

fn scoped_name(&self) -> String

Returns the full name of this lint by combining LintRule::scope and LintRule::name as {scope}::{name}. Read more
Source§

fn groups(&self) -> &'static [LintGroup]

Returns the static lint groups this lint rule belongs to. Read more
Source§

fn configuration_options(&self) -> &[LintRuleConfigurationOptionName]

Returns a map of configuration options used by this lint rule. Read more
Returns a map of additional associated links for this lint rule. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.