安全RCE之未授权访问分析(9)
2023-05-02 来源:飞速影视
post "account/setting/:id", to: "account#setting", constraints: { id: /[A-Z]d{5}/ }
account/setting/是请求的固定url,:id表示带参数的路由。to表示交给accountcontroller下的actionsetting处理。constraints定义了路由约束,使用正则表达式来对参数进行约束。
过滤器
rails中可以插入定义好的类方法实现过滤器,一般分为before_action,after_action,around_action分别表示调用action"之前"、“之后”、"围绕"需要执行的操作。如:
before_action :find_product, only: [:show]
上方表示在执行特定 Actionshow之前,先去执行 find_product 方法。
还可以使用skip_before_action跳过之前指定的方法。
class ApplicationController < ActionController::Base before_action :require_loginendclass LoginsController < ApplicationController skip_before_action :require_login, only: [:new, :create]end
如在父类ApplicationController定义了一个,在子类可以使用跳过,只针对于和create的调用。
漏洞简要介绍
根据gitlab的官方漏洞issues来看,当访问接口/uploads/user上传图像文件时,GitLab Workhorse会将扩展名为jpg、jpeg、tiff文件传递给ExifTool。用于删除其中不合法的标签。具体的标签在workhorse/internal/upload/exif/exif.go中的startProcessing方法中有定义,为白名单处理,函数内容如下:
func (c *cleaner) startProcessing(stdin io.Reader) error { var err error //白名单标签 whitelisted_tags := []string{ "-ResolutionUnit", "-XResolution", "-YResolution", "-YCbCrSubSampling", "-YCbCrPositioning", "-BitsPerSample", "-ImageHeight", "-ImageWidth", "-ImageSize", "-Copyright", "-CopyrightNotice", "-Orientation", } //传入参数 args := append([]string{"-all=", "--IPTC:all", "--XMP-iptcExt:all", "-tagsFromFile", "@"}, whitelisted_tags...) args = append(args, "-") //使用CommandContext执行命令调用exiftool c.cmd = exec.CommandContext(c.ctx, "exiftool", args...) //获取输出和错误 c.cmd.Stderr = &c.stderr c.cmd.Stdin = stdin c.stdout, err = c.cmd.StdoutPipe() if err != nil { return fmt.Errorf("failed to create stdout pipe: %v", err) } if err = c.cmd.Start(); err != nil { return fmt.Errorf("start %v: %v", c.cmd.Args, err) } return nil}