"""Component data classes used in AVID report and vulnerability datamodels."""fromtypingimportDict,List,OptionalfrompydanticimportBaseModelfrom.enumsimport(ArtifactTypeEnum,ClassEnum,LifecycleEnum,MethodEnum,SepEnum,TypeEnum,)
[docs]classLangValue(BaseModel):"""Generic class to store a string with its language specified."""lang:strvalue:str
[docs]classArtifact(BaseModel):"""Type and name of an affected artifact."""type:ArtifactTypeEnumname:str
[docs]classDetection(BaseModel):"""Method to detect a specific issue."""type:MethodEnumname:str
[docs]classAffects(BaseModel):"""Information on Artifact(s) affected by this report."""developer:List[str]deployer:List[str]artifacts:List[Artifact]
[docs]classProblemtype(BaseModel):"""Description of the problem a report/vuln is concerned with."""classof:ClassEnumtype:Optional[TypeEnum]=Nonedescription:LangValue
[docs]classMetric(BaseModel):"""Quantification of the issue in a specific report."""name:strdetection_method:Detectionresults:Dict
[docs]classReference(BaseModel):"""Details for a reference of a report/vulnerability."""type:Optional[str]=Nonelabel:str# AnyUrl is a better fit, but keeping this because submissions# are not standard yeturl:strclassConfig:# type is excluded if Nonefields={"type":{"exclude":True}}
[docs]classAtlasTaxonomy(BaseModel):"""ATLAS taxonomy mappings representing attack procedure steps."""tactic:Optional[str]=Nonetechnique:Optional[str]=Nonedescription:Optional[str]=NoneclassConfig:# Fields are excluded if Nonefields={"tactic":{"exclude":True},"technique":{"exclude":True},"description":{"exclude":True}}
[docs]classAvidTaxonomy(BaseModel):"""AVID taxonomy mappings of a report/vulnerability."""vuln_id:Optional[str]=Nonerisk_domain:List[str]sep_view:List[SepEnum]lifecycle_view:List[LifecycleEnum]taxonomy_version:strclassConfig:# vuln_id is excluded if Nonefields={"vuln_id":{"exclude":True}}
[docs]classJailbreakTaxonomyItem(BaseModel):"""0DIN Jailbreak Taxonomy item with Category, Strategy, and Technique."""Category:Optional[str]=NoneStrategy:Optional[str]=NoneTechnique:Optional[str]=NoneclassConfig:# Fields are excluded if Nonefields={"Category":{"exclude":True},"Strategy":{"exclude":True},"Technique":{"exclude":True}}
[docs]classOdinTaxonomy(BaseModel):"""0DIN taxonomy mapping for AI security disclosures."""SocialImpactScore:Optional[str]=NoneJailbreakTaxonomy:Optional[List[JailbreakTaxonomyItem]]=NoneclassConfig:# Fields are excluded if Nonefields={"SocialImpactScore":{"exclude":True},"JailbreakTaxonomy":{"exclude":True}}
[docs]classImpact(BaseModel):"""Impact information of a report/vulnerability. E.g. different taxonomy mappings, harm and severity scores. """avid:Optional[AvidTaxonomy]=Noneatlas:Optional[List[AtlasTaxonomy]]=Nonecvss:Optional[CVSSScores]=Nonecwe:Optional[List[CWETaxonomy]]=Noneodin:Optional[OdinTaxonomy]=NoneclassConfig:# Fields are excluded if Nonefields={"avid":{"exclude":True},"atlas":{"exclude":True},"cvss":{"exclude":True},"cwe":{"exclude":True},"odin":{"exclude":True}}